在不同的浏览器大小下访问测试站点,对测试页面截图并保存,然后观察或使用图像比对工具对被测 页面的前端样式进行评测。比如可以将浏览器设置成移动端大小(480x800),然后访问移动站点,对其样式 进行评估;WebDriver 提供了 set_window_size() 方法来设置浏览器的大小。
#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://m.mail.10086.cn")
#参数数字为像素点 print "设置浏览器宽480、高800显示"
driver.set_window_size(480, 800)
driver.quit()
在 PC 端运行执行自动化测试脚本大多的情况下是希望浏览器在全屏幕模式下执行,那么可以使用 maximize_window()方法,其用法与 set_window_size() 相同,但它不需要传参。
在使用浏览器浏览网页的时候,浏览器提供了后退和前进按钮,可以方便的对浏览过的网页之间切换, 那么 WebDriver 也提供了对应的 back()和 forward()方法来模拟后退和前进按钮。下面通过例子来演示这两 个方法的使用。
#coding=utf-8 from selenium import webdriver
driver = webdriver.Firefox()
#访问百度首页
first_url= 'http://www.baidu.com'
print "now access %s" %(first_url)
driver.get(first_url)
#访问新闻页面
second_url='http://news.baidu.com'
driver.get(second_url)
#返回(后退)到百度首页
print "back to %s "%(first_url)
driver.back()
#前进到新闻页
print "forward to %s"%(second_url)
driver.forward()
driver.quit()
自动化脚本是交给工具去执行,有时候打印的错误信息并不十分明确,如果在脚本执行出错的时候将 对当前窗口截图保存,那么通过图片信息会更只观帮助我们找到脚本出错的原因。Webdriver 提供了截图 函数 get_screenshot_as_file()来截取当前窗口。
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
try:
driver.find_element_by_id('kw_error').send_key('selenium')
driver.find_element_by_id('su').click()
except :
driver.get_screenshot_as_file("D:\\baidu_error.jpg")
driver.quit()
在本例中用到了 Python 的异常处理,要本例中百度输入框的 id=kw_error 会定位不到元素,那么 try 就会捕捉到这个异常,从而执行 except,在 except 中执行 get_screenshot_as_file()对当前窗口进行截图,这 里需要指定图片的保存路径及文件名,并且关闭当前驱动。
脚本运行完成打开 D 盘就可以找到 baidu_error.jpg 图片文件了。
在前页的例子中我们一直在使用 quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之 外 WebDriver 还提供了 close()方法,用于关闭当前窗口。当脚本在执行时打开了多个窗口,如本章的第 10 小节多窗口的处理,这个时候只能关闭其中的某一个窗口,这个时候就需要使用 close()来关闭。
在前面我已经学会了定位元素,定位只是第一步,定位之后需要对这个元素进行操作,或点击(按钮)或输入(输入框)或提交(表单),下面我们就来认识一下这些最常用的方法。
在 WebDriver 中,大多简单有趣的页面交互的方法都将通过 WebElement 接口提供,最常用的操作页 面元素的方法有下面几个:
1.clear() 清除文本,如果是一个文件输入框
2.send_keys(*value) 在元素上模拟按键输入
3.click() 单击元素
下面通过126邮箱登录来演示这些方法的使用。
#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.126.com")
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()
driver.quit()
clear()方法用于清除文本输入框中的内容,例如登录框内一般默认会有“账号”“密码”等提示信息 用于引导用户输入正确的数据,如果直接向输入框中输入数据,可能会与输入框中的提示信息拼接,本来 用户输入为“username”,结果与提示信息拼接为“帐号 username”,从而造成输入信息的错误;这个时候 可以先使用 clear()方法清除输入框内的提示信息再进行输入。
send_keys()方法模拟键盘输入向输入框里输入内容。如上面的例子中通过这个方法向用户名和密码框 中输入用户名和密码。
click()方法可以用来单击一个按钮,前提是它是可以被点击元素,它与 send_keys()方法是 web 页面操 作中最常用到的两个方法。其实 click()方法不仅仅用于点击一个按钮,还可以单击任何可以点击文字/图片 连接、复选框、单选框、甚至是下拉框等。
现在页面中随处可以看到需要右击、双击、鼠标 悬停、甚至是鼠标拖动等操作的功能设计。在 WebDriver 中这些关于鼠标操作的方法由 ActionChains 类提供。
ActionChains 类提供的鼠标操作的常用方法:
1.perform() 执行所有 ActionChains 中存储的行为
2.context_click() 右击
3.double_click() 双击
4.drag_and_drop() 拖动
5.move_to_element() 鼠标悬停
360网盘对于操作单个文件或文件夹所提供的快捷菜单,对于这样的操作就可以使用 context_click()方法来模拟右键操作。
from selenium import webdriver
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("http://yunpan.360.cn")
#定位到要右击的元素
right_click =driver.find_element_by_id("xx")
#对定位到的元素执行鼠标右键操作
ActionChains(driver).context_click(right_click).perform()
fromselenium.webdriver importActionChains
对于 ActionChains 类下面的方法,在使用之前需要先将模块导入。
ActionChains(driver)
调用 ActionChains()方法,在使用将浏览器驱动 driver 作为参数传入。
context_click(right_click)
context_click()方法用于模拟鼠标右键事件,在调用时需要传入右键的元素。
perform()
执行所有 ActionChains 中存储的行为,可以理解成是对整个操作事件的提交动作。
from selenium import webdriver
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#定位到要悬停的元素
above =driver.find_element_by_id("xx")
#对定位到的元素执行悬停操作
ActionChains(driver).move_to_element(above).perform()
drag_and_drop(source,target)在源元素上按下鼠标左键,然后移动到目标元素上释放。
source: 鼠标拖动的源元素。
target: 鼠标释放的目标元素。
from selenium import webdriver
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
#定位元素的源位置
element = driver.find_element_by_name("xxx")
#定位元素要移动到的目标位置
target = driver.find_element_by_name("xxx")
#执行元素的拖放操作
ActionChains(driver).drag_and_drop(element,target).perform()
有时候我们在测试时需要使用 Tab 键将焦点转移到下一个元素,Keys()类提供键盘上几乎所有按键的 方法,前面了解到 send_keys()方法可以模拟键盘输入,除此之外它还可以模拟键盘上的一些组合键,例 Ctrl+A、Ctrl+C 等
#coding=utf-8
from selenium import webdriver
#引入Keys模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
#删除多输入的一个m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#输入空格键+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys(u"教程")
#ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#通过回车键盘来代替点击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
driver.quit()
在使用键盘按键方法前需要先导入 keys 类包。
下面经常使用到的键盘操作:
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,’a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,’c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,’x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,’v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12