Oct1a

Selenium自动化测试

简介

Selenium 可以直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行,其他测试工具都不能覆盖如此多的平台。

功能

  • 框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
  • 使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
  • 使用简单,可使用Java,Python等多种语言编写用例脚本。

安装

IEDriverServer下载

基本操作

打开网页

driver.get('www.baidu.com')

获取元素

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector #获取多个元素

Xpath定位

Xpath

截屏

截屏的两种方式,无法保存为jpg否则会报错

driver.save_screenshot("codingpy.png")
driver.get_screenshot_as_file("codingpy.png")

需要注意的是,此方法截屏是整个对象界面,而不是单独某个区域

设置大小

设置浏览器窗口全屏
driver.maximize_window()

设置固定分辨率大小(例如1024*1080)
driver.set_window_size(1024,1080)

关闭窗口

关闭窗口

Close:关闭当前窗口,可用于某个具体窗口关闭

driver.close()

Quit:关闭所有与当前操作有关联的窗口,并退出驱动。需要释放资源时可使用此方法

driver.quit()

鼠标操作

from selenium.webdriver.common.action_chains import ActionChains

鼠标单击

单击是正常点击的一个行为,如定位某个元素后点击

driver.find_element_by_name('xxx').click()

鼠标双击

双击需定位某个具体元素,最后使用double_click 方法实现双击

ActionChains(driver).double_clcik(element).perform()

Perform()函数表示执行ActionChains中所定义的动作

鼠标右键

ActionChains(driver).move_to_element(element).context_click().perform()

鼠标拖拽

是对页面元素的拖拽效果,可使用drag_and_drop()方法实现

键盘操作

可以键盘输入,回车,回退,空格,CTRL等操作,封装了Keys类

所以在进行模拟键盘操作时,需事先导入Keys类

from selenium.webdriver.common.keys import Keys

键盘输入

用户名输入admin,密码输入admin

driver.find_element_by_name('name').send_keys("admin")

driver.find_element_by_name('pwd').send_keys("admin")

键盘回车

模拟键盘的回车操作,可利用Keys.ENTER方法实现

driver.find_element_by_name('button').send_keys(Keys.ENTER)

Frame 框架定位

Frame是HTML框架结构常用的一种布局格式,共有三种形式: frameset、 frame 及iframe。

Frameset:将HTML页面分割,可以嵌入多个HTML源码文件,实现单个页面显示不同HTML页面效果,不能嵌入在BODY标签中。
Frame:在Frameset 下面设置Frame,实现某个框架页面,必须嵌套在Frameset中,无法单独存在 Iframe:在某个页面嵌入一个HMTL窗口信息,可脱离Frameset应用,框架属性有自己定义。Frameset在分割页面后,可以由Frame和iframe嵌入页面信息,Frame仅 能在Frameset中应用,Iframe则无此限制。

Frameset与HML其他标签相同,不影响正常的元素定位,但frame及iframe则不同,在定位元素过程中,需先定位frame及iframe。

单层frame

通过id定位

driver.switch_to.frame('frameID')

通过name定位

driver.switch_to.frame('frameName')

通过索引定位

如果frame没有id或name,则可以使用索引值定位

driver.switch_to.frame(0)

嵌套frame

当某个frame中嵌套了其他的frame时,切换frame则需以嵌套结构逐层切换

先通过id切换到frame1

driver.switch_to.frame('frame1')

再通过id切换到frame2

driver.switch_to.frame('frame2')

当切换到frame2进行操作后,如果需要返回到frame1,则可利用以下方法:

driver.switch_to.parent_frame()

当返回上一层frame中,类似回退效果,当上一层为主文档时,该方法无效

遇到的问题

使用IEDriverServer后用send_keys输入速度太慢

将IEDriverServer替换为32位的版本

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。