什么是selenium
Selenium 自动化测试工具,它主要是用于 Web 应用程序的自动化测试,但并不只局限于此,同时支持所有基于 web 的管理任务自动化。
Selenium 的特点:
1.开源,免费
2.多浏览器支持:FireFox、Chrome、IE、Opera
3.多平台支持:linux 、windows、MAC
4.多语言支持:java、Python、Ruby、php、C#、JavaScript
5.对 web 页面有良好的支持
6.简单(API 简单)、灵活(用开发语言驱动)
7.支持分布式测试用例执行
Selenium 是支持多种开发语言的,对于不同的语言来说都有其对应的库。
对 Robot Framework 框 架 的 Selenium 库 有 两 个 : SeleniumLibrary 和 Selenium2Library 。SeleniumLibrary 是基于 Selenium1.0 开发的,Selenium2Library 是基于 Selenium2.0 开发的。如果没有历史遗留问题,我们直接使用 Selenium2Library。
安装selenium2library
用pip下载,pip install robotframework-selenium2library。
浏览器和浏览器驱动版本
浏览器推荐chrome浏览器,浏览器驱动版本要匹配上,浏览器版本最好低点,推荐chrome5x版本.
chrome 的驱动为:chromedriver.exe 。
IE 的驱动为:IEDriverServer.exe
浏览器默认为空时启动 FireFox.exe。
selenium2libeary常用关键字
-
打开浏览器我们用open browser关键字
-
关闭浏览器我们用close browser/browsers关键字
-
浏览器窗口最大化我们用maximize browser window关键字
-
浏览器前进我们用go to关键字,后退用go back关键字
-
重新加载页面我们用reload page关键字
-
页面截图我们用capture page screenshot关键字
-
元素定位,下面列出RF的元素定位方法
如何通过上述的方法去定位页面元素呢?举个例子,首先我们在百度首页中点击输入框。然后右击选择查看元素或者按F12按键。
图一:
图二:
我们看到标蓝的这一行就是输入框的信息,有id,name。元素定位方法中有id我们优先选择id,因为页面元素的id是唯一的。接下来我们到RIDE中用关键字定位元素。
介绍个最简单的元素定位方法没学过都可以定位到元素:先点击元素,然后右击选择查看元素,右击标蓝的那一行,选择复制,再选择Xpath。粘贴出来就是用xpath方法定位到元素。
-
输入文本我们用input text关键字
-
点击页面元素/按钮/图片等关键字
点击页面元素 click element
双击页面元素 Double Click Element
点击图片 Click Image
点击链接 click link
点击按钮 click button -
模拟键盘按键我们用Press keys 关键字
Press key关键字废弃不用后,开始使用Press keys关键字,用法也发生了一些变化。具体就不阐述。Keys既可以是字符,也可以是按键名。
1.举一个向文本框输入字符的例子,输入Q+w+1
运行结果
2.再举一个PAGE_DOWN按键的例子
运行结果:
-
显示等待我们wait until page contains element
解释是直到定位的元素出现才会执行下一步,如果超时就报异常,可以自定义报错信息。有时候sleep很多秒定位的元素还是没找到,用显式等待一下子就找到了。所以推荐大家用显式等待。
格式如下:
wait until element is enabled |locator|timeout=None
wait until page contains element | locator| timeout=None
…(更多关键字按F5)
接下来我们就看个失败报错的例子,自定义报错:
运行结果:
-
隐式等待我们用set selenium implicit wait关键字
在一定时间内找到元素则马上运行,若超过设置的等待时间,则会报错。优点是隐式等待在整个driver周期只需要设置一次。缺点是会一直等待页面全部加载完成,也就是浏览器标签栏的小圈不再转才会执行下一步。
set selenium implicit wait | timeout
get selenium implicit wait
运行结果:
-
进入frame或iframe中我们用select frame关键字,退出用unselect frame
有时候元素有id,但是却定位不到,这时候我们就要考虑他是不是在一个iframe里面。如果是的话,我们需要先进入iframe里面,再去定位该元素。
select frame | locator
Unselect frame 回到最上层frame或iframe
举个例子,我们在网页上登录QQ邮箱,登录界面的账号和密码文本框就是在一个frame。思路如下:
先找到元素位置,然后看最下面的一行,往左点,找到frame在的地方。我们获取到iframe的id是login_frame,进入到iframe中,那么接下来输入账号密码就很好操作。
-
验证页面是否包含相应结果,就不一一介绍,都可以看得懂。
Page Should(Not)Contain Button
Page Should(Not)Contain Checkbox
Page Should(Not)Contain Element
Page Should(Not)Contain Image
Page Should (Not)Contain Link
Page Should (Not)Contain List
Page Should(Not)Contain Radio Button
Page Should(Not)Contain Textfield -
获取页面返回值我们用get text/value关键字
get text是获取元素text属性,get value是获取元素的值
get text | locator
get value | locator
-
获取元素属性我们用get attribute关键字(适用于判断按钮是否被勾选)
获取页面元素的属性,比如name,id,value,class。
get attribute | locator | attribute
示例:
运行结果:
作者觉得比较实用的是判断按钮是否被选中,一般来说被选中的元素会有checked属性。返回值是True;未被选中的元素没有checked属性,返回值是None。我们还可以通过jquery进行判断。被勾选就是True,未勾选就是False.两种方法都是判断checked属性。
-
下拉下拉框的相关操作
Unselect From List By Index
Unselect From List By Value
Unselect From List By Label
如果下拉框不是select标签,选项值而是在ul的li中,解决方法是使用js定位,有selenium基础可以自定义,先定位下拉框点击一下,然后定位ul,最后通过索引值定位到列表项,最后点击。代码给了,自己在seleniumlibrary里面封装。当然也有js方法,作者还是学,哈哈,羞愧,学完把代码贴出来。
好啦,先更新到这里,后面会不定期更新。加油,吉先生!