当一个自动化测试被实现在一个浏览器之后,我们会希望我们的测试能够覆盖到尽量多的别的浏览器。通过跨平台的测试来保证我们的程序在多个浏览器下都能正常工作。

在安装了selenium之后,firefox webdriver和IE webdriver就已经是ready to use的了,但是如果想要在Chrome下进行测试的话需要再安装Chrome webdriver。Chrome webdriver是由Chromium项目自己维护的,因此在实现上也和Firefox driver以及IE driver有一些不同之处。这就导致了在将在Firefox上可以正常运行的测试代码运用到chrome时会产生一些兼容性的问题。

1. WebDriverWait的可靠性

上一篇博客提到过,当页面上有使用ajax异步加载的元素的时候,为了确保对元素进行操作的时候该元素已经处在一个可用的状态下了,我们可以使用WebDriverWait来使driver等待至目标元素满足给出的条件时才继续下面的操作。但是在Chrome中,这个方法似乎不是总是适用。

2.一些奇怪的异常

总的来说,测试代码在Chrome下的运行是非常快的,至少人眼就可以感觉出来比Firefox下的运行速度要快一点,当然这是在不报异常的情况下。而实际情况是,在Firefox下可以正常运行的代码,在Chrome下却会出现问题,并且抛出一些奇怪的异常:

selenium.common.exceptions.WebDriverException: Message: u'unknown error: Element is not clickable at point

selenium.common.exceptions.InvalidElementStateException: Message: u'invalid element state

selenium.common.exceptions.ElementNotVisibleException: Message: u'element not visible 

第一个异常的抛出一般会发生在radio button的点击事件上,但是一般异常抛出的同时,系统会告诉你当前的element不可以被点击,但是另外的某个元素可以接受这个点击事件。这时我们可以查看页面上系统给出的备选元素是否也可以满足我们的点击需求,如果可以,我们可以简单的把radio button换成这个备选元素来回避这个异常。

另外,这三个异常都与Chrome的运行速度以及WebDriverWait的可靠性有一定关系。因此,我们可以稍显“粗暴”的让webdriver休眠一段时间来slow down测试代码的执行速度,强制driver等待一个固定的时间来让元素加载完成。

import time
#some test code
time.sleep(2)
#continue test code

time.sleep(2)会使driver休眠两秒,然后再继续执行后面的测试代码

3.不在当前视图范围内的元素的操作

当我们使用Firefox webdriver来测试某个页面的时候,如果我们选取了某个页面元素来对其进行操作,但是这个元素不在当前浏览器显示的视图范围内,Firefox webdriver的做法是自动的将视图调整到该元素显示的区域,然后对这个元素进行操作。也就是说driver自己完成了页面的scroll down or up的操作。

但是在Chrome webdriver中,如果待操作元素不在视图显示范围内,则会抛出Element is not clickable at point异常。或是如果设置了WebDriverWait并且它正常工作的话会抛出Timeout异常。

因此,在使用Chrome wbedriver的时候,我们要更加小心,对于需要滚动页面才能显示在视图中的元素,我们需要添加代码使页面滚动至元素显示的范围,然后再对该元素进行操作。使页面滚动的方法是:

driver.execute_script("window.scrollBy(0,200)","")  #向下滚动200px
driver.execute_script("window.scrollBy(0,document.body.scrollHeight)","") #向下滚动到页面底部

python selenium自动化(三)Chrome Webdriver的兼容的更多相关文章

  1. Python+Selenium自动化-设置等待三种等待方法

    Python+Selenium自动化-设置等待三种等待方法   如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...

  2. Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。

    Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息.   本文链接:https://blog.csdn.net/qq_38161040/art ...

  3. Python+Selenium自动化总结

    Python+Selenium自动化总结 1.环境搭建 1.1.安装selenium模块文件 pip install selenium 1.2.安装ChromeDriver驱动 [1]下载安装Chro ...

  4. python selenium自动化点击页面链接测试

    python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...

  5. python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

  6. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  7. Python+Selenium自动化-模拟键盘操作

    Python+Selenium自动化-模拟键盘操作   0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...

  8. Python+Selenium自动化-清空输入框、输入内容、点击按钮

    Python+Selenium自动化-清空输入框.输入内容.点击按钮   1.输入内容 send_keys('valve'):输入内容valve #定位输入框 input_box = browser. ...

  9. Python+Selenium自动化-设置浏览器大小、刷新页面、前进和后退

    Python+Selenium自动化-设置浏览器大小.刷新页面.前进和后退   1.设置浏览器大小 maximize_window():设置浏览器大小为全屏 set_window_size(500,5 ...

  10. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

随机推荐

  1. JS:实用功能

    ylbtech-jQuery:函数-导航 添加样式(addClass).移除样式(removeClass) 轮替函数(toggle()) 选项拼加 全选 网页刷点器 jQuery:3.1,添加样式(a ...

  2. 【windows核心编程】DLL相关(2)

    关于DLL的延迟加载 延迟加载DLL,使用的是隐式加载方式,当为exe使用的DLL指定为延迟加载的时候,连接器会将exe的[导入段]中去除该DLL的相关信息,同时在exe中嵌入一个新的[延迟加载段]表 ...

  3. qqmap 的一些操作

    ; var mapcontorl = "mapContainer"; var fullscreen = false; function qqMap(options) { var t ...

  4. bzoj 1537 [POI2005]Aut- The Bus(DP+BIT)

    [题意] 顺序经过k个点,求获得的最大权值和. [思路] 设f[i]表示到第i个点,则有转移式: f[i]=min{ f[j]+w[i] } x[j]<=x[i],y[j]<=y[i] 满 ...

  5. 团 大连网赛 1007 Friends and Enemies

    //大连网赛 1007 Friends and Enemies // 思路:思路很棒! // 转化成最大二分图 // 团:点集的子集是个完全图 // 那么朋友圈可以考虑成一个团,原题就转化成用团去覆盖 ...

  6. json字符串转换为JSONObject和JSONArray

    一.下载json 具体到http://www.json.org/上找java-json下载,并把其放到项目源代码中,这样就可以引用其类对象了 二.具体转化过程 //JSONObject String ...

  7. C++ 我想这样用(六)

    嗯,上一篇已经介绍了面向过程编程的语法知识,接下来是最后的也是最重要的一个部分: 第三部分:基于对象的编程风格 1.构造函数的两种写法 比如我们有如下的类定义: class Circle { publ ...

  8. JSP学习笔记(一)

    注释: 1.单行注释<!-- -->或者// <%@ page language="java" import="java.util.*" co ...

  9. My97DatePicker源码的K方法

    <head></head> <script> var X = window,M = "document", C = "getEleme ...

  10. [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用

    A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC     B. ...