webdriver(python)学习笔记二
自己开始一个脚本开始学习:
# coding = utf-8 from selenium import webdriver browser = webdriver.Firefox() browser.get("http://www.baidu.com") browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() browser.quit()
脚本实现打开百度浏览器,输入seleniu查询字段,点击“百度一下”按钮,退出浏览器。
browser = webdriver.Firefox()
使用的火狐浏览器,当前也可以使用其他的。
browser.get("http://www.baidu.com")
获取地址
browser.find_element_by_id("kw").send_keys("selenium")
百度查询输入框对应的代码如下所示:
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
一个控件有若干属性id 、name等,百度输入框的id 叫kw ,因此取的id值。
browser.find_element_by_id("su").click()
百度的查询按钮代码如下所示:
<input id="su" class="bg s_btn" type="submit" onmouseout="this.className='bg s_btn'" onmousedown="this.className='bg s_btn s_btn_h'" value="百度一下">
查询按钮id为su,行为为click()
关闭浏览器
browser.quit()
不仅关闭窗口,还会彻底的退出webdriver,释放与driver server之间的连接。
close方法关闭当前的浏览器窗口。简单来说quit是更加彻底的close,quit会更好的释放资源,适合强迫症和完美主义者。
添加休眠时间
通过增加休眠时间,减慢操作过程。
# coding = utf-8 from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(0.3) #sleep 0.3s browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() time.sleep(3) #sleep 3s browser.quit()
time.sleep() 函数可以在任意位置使用。它主要用于由于网络原因或页面加载慢的情况下,更能增实的模拟用户的行为。如查询时输入selenium,搜索按钮还没有加载出来,那脚本就会报错,如果在适合的位置增加了休眠时间就有助于减少网络原因造成的脚本执行失败。
打印title与URL
# coding = utf-8 from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(0.3) #sleep 0.3s browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() time.sleep(1) #sleep 3s print browser.title #把title页面打印出来 browser.quit()
直接执行可以看出打印结果:
>>> selenium_百度搜索
访问URL
web UI测试里最简单也是最基本的事情就是访问1个链接了。在python的webdrive中,访问url时应该使用get方法。
#coding=utf-8 from selenium import webdriver import time browser = webdriver.Firefox() #访问百度首页 first_url= 'http://www.baidu.com' print "now access %s" %(first_url) browser.get(first_url) time.sleep(2) browser.quit()
将浏览器最大化
实际脚本在执行过程中并非是最大化的,而当我们在测试中使用一些基于图像和坐标的辅助测试工具时,我们就会需要使浏览器在每次测试时保存最大化,以便在同一分辨率下进行图像比对和坐标点选。
举例来说,如果在webdriver测试中使用了sikuli来对flash插件进行操作的话,把浏览器最大化无疑是一个比较简单的保证分辨率统一的解决方案。
# coding = utf-8 from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(0.3) #sleep 0.3s print "浏览器最大化" browser.maximize_window() #将浏览器最大化显示 browser.find_element_by_id("kw").send_keys("selenium") time.sleep(1) #sleep 1s browser.find_element_by_id("su").click() browser.quit()
设置浏览器大小
设置浏览器窗口的大小有下面两个比较常见的用途:
-
在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试的灵活性及普遍适用性。比如可以跟sikuli结合,使用sikuli操作flash;
-
在不同的浏览器大小下访问测试站点,对测试页面截图并保存,然后观察或使用图像比对工具对被测页面的前端样式进行评测。比如可以将浏览器设置成移动端大小(320x480),然后访问移动站点,对其样式进行评估;
# coding = utf-8 from selenium import webdriver import time browser = webdriver.Firefox() browser.get("http://www.baidu.com") time.sleep(0.3) #sleep 0.3s print "浏览器宽480,高800" browser.set_window_size(480,800) #设置大小 browser.find_element_by_id("kw").send_keys("selenium") time.sleep(1) #sleep 1s browser.find_element_by_id("su").click() browser.quit()
webdriver提供了很多调整浏览器窗口的接口,比如set_window_position(设置或获取浏览器的位置)。在一般情况下这些功能并不常用。
浏览器前进与后退功能
浏览器上有一个后退、前进按钮,对于浏览网页的人是比较方便的;对于做web自动化测试的来说应该算是一个比较难模拟的问题;其实很简单,下面看看python的实现方式
#coding=utf-8 from selenium import webdriver import time import os if "HTTP_PROXY" in os.environ:del os.environ['HTTP_PROXY'] browser = webdriver.Firefox() #访问百度首页 first_url= 'http://www.baidu.com' print "now access %s" %(first_url) browser.get(first_url) time.sleep(2) #访问新闻页面 second_url='http://news.baidu.com' print "now access %s" %(second_url) browser.get(second_url) time.sleep(2) #返回(后退)到百度首页 print "back to %s "%(first_url) browser.back() time.sleep(1) #前进到新闻页 print "forward to %s"%(second_url) browser.forward() time.sleep(2) browser.quit()
if "HTTP_PROXY" in os.environ:del os.environ['HTTP_PROXY'] 这行加不加都成。
说实话,这两个功能一般不太常用。所能想到的场景大概也就是在几个页面间来回跳转,省去每次都get url。