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 ...
随机推荐
- hdu 2059(dp)
题意:容易理解... 思路:dp[i]表示乌龟到达第i个充电站时最少花费时间到第 i 个充电站后,从起点开始遍历到第 i-1 个充电站,得到最少花费时间 状态转移方程:dp[i]=min(dp[j]+ ...
- memcache 分布式,算法实现
memcached 虽然称为 “ 分布式 ” 缓存服务器,但服务器端并没有 “ 分布式 ” 功能.每个服务器都是完全独立和隔离的服务. memcached 的分布式,则是完全由客户端程序库实现的. 这 ...
- 获取手机内存\可用内存\单个APP运行内存
/** 手机总内存 */ private String getTotalMemory() { // 系统内存信息文件 String str1 = "/proc/meminfo"; ...
- js笔记--json
1.什么事json: json是指javascript对象表示法(javascript Object Notation), json是轻量级的文本数据交换格式: json独立于语言: json具有自我 ...
- Modules-nodejs
Modules Node有一个简易的模块加载系统.在node中,文件和模块是一一对应的.下面示例是foo.js加载同一目录下的circle.js. foo.js的内容: var circle = re ...
- 快速建立Linux c/c++编译环境
sudo apt-get install build-essential 省时又省心~
- Sql建表语句
create table dbo.[Finance_CityInfo] ([CityId] int identity(1,1) not null , [City] nvarchar(20) not n ...
- PhoneGap搭建运行环境(3.2版本)
一. 1.准备环境nodejs(http://nodejs.org/download/) 2.ant(http://ant.apache.org/bindownload.cgi) 3.Android ...
- linux 和 android 源码的 cross reference (即网页浏览代码的引用)
linux: http://lxr.free-electrons.com/ 相当好 android: http://androidxref.com
- nova --debug image-list
nova --debug image-list DEBUG (session:) REQ: curl -g -i -X GET http://liberty-aio:35357/v3 -H " ...