python selenium自动化(三)Chrome Webdriver的兼容
当一个自动化测试被实现在一个浏览器之后,我们会希望我们的测试能够覆盖到尽量多的别的浏览器。通过跨平台的测试来保证我们的程序在多个浏览器下都能正常工作。
在安装了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的兼容的更多相关文章
- Python+Selenium自动化-设置等待三种等待方法
Python+Selenium自动化-设置等待三种等待方法 如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...
- Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。
Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息. 本文链接:https://blog.csdn.net/qq_38161040/art ...
- Python+Selenium自动化总结
Python+Selenium自动化总结 1.环境搭建 1.1.安装selenium模块文件 pip install selenium 1.2.安装ChromeDriver驱动 [1]下载安装Chro ...
- python selenium自动化点击页面链接测试
python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...
- python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]
背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...
- Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法
Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法 之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...
- Python+Selenium自动化-模拟键盘操作
Python+Selenium自动化-模拟键盘操作 0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...
- Python+Selenium自动化-清空输入框、输入内容、点击按钮
Python+Selenium自动化-清空输入框.输入内容.点击按钮 1.输入内容 send_keys('valve'):输入内容valve #定位输入框 input_box = browser. ...
- Python+Selenium自动化-设置浏览器大小、刷新页面、前进和后退
Python+Selenium自动化-设置浏览器大小.刷新页面.前进和后退 1.设置浏览器大小 maximize_window():设置浏览器大小为全屏 set_window_size(500,5 ...
- Python+Selenium自动化-获取页面信息
Python+Selenium自动化-获取页面信息 1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...
随机推荐
- Oracle OCI-22053:溢出错误解决方法
原文 Oracle OCI-22053:溢出错误解决方法 Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这 ...
- ie对行高line-height的诡异解释
切 游戏页面真地是要求太精细了,做按钮的时候我犯了一个错误,居然用span的内联元素的行高和padding来控制,虽然有很多好处,但是IE对 line-height的解释导致按钮经常下边会缺一小部分, ...
- T-SQL 常用语句学习
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- salt 批量部署与配置
salt是啥? salt是一个大型分布式的配置管理系统(安装升级卸载软件,检测环境),也是一个远程命令执行系统. salt 分为 master和minion,master顾名思义就是老大,管理子节点: ...
- Merge Cells for DataGrid 合并单元格
只适合不分页的固定行列的表格 <script type="text/javascript"> function onLoadSuccess(data){ var mer ...
- 第二百四十一天 how can I 坚持
今天去了趟小米之家,红米note3感觉还好吧.小米,希望不会令人失望啊,很看好的,应该不算是米粉吧. 腾讯课堂. hadoop. 摄影. 没有真正的兴趣啊,一心只想着玩,什么事真正的兴趣,就是无时无刻 ...
- Apache Spark Mesos
Mesos是一个资源管理框架,提供类似于YARN的功能. 用户可以在其中插件式地运行Spark. MapReduce. Tez等计算框架的任务. Mesos会对资源和任务进行隔离,并实现高效的资源任务 ...
- 回车跳到下一个EDIT
1.按下方法procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if Key ...
- c语言中register类型的变量
C语言中: 一.register变量 关键字regiter请求编译器尽可能的将变量存在CPU的寄存器中.有以下几点注意的地方. register变量必须是能被CPU寄存器所接受的类型,这通常意味着re ...
- opencv 模板匹配与滑动窗口(单匹配) (多匹配)
1单匹配: 测试图片: code: #include <opencv\cv.h> #include <opencv\highgui.h> #include <open ...