目录css
Selenium的配置python
Selenium的调用git
Selenium的使用github
定位web
定位元素的使用chrome
定位下拉标签元素 api
在iframe框架之间切换 浏览器
上传文件框架
Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操做同样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试浏览器的兼容性——测试你的应用程序看是否可以很好得工做在不一样浏览器和操做系统之上。测试系统功能——建立回归测试检验软件功能和用户需求。支持自动录制动做和自动生成 .Net、Java、Perl等不一样语言的测试脚本。
一、安装 Selenium模块: pip install Selenium
二、下载浏览器驱动,Selenium3.x调用浏览器必须有一个webdriver驱动文件
下载以后,解压到任意目录(路径不要有中文)。
from selenium import webdriver ## 若是是chrome浏览器的驱动 driver=webdriver.Chrome("G:\Anaconda3-5.3.0\chromedriver.exe") ##若是是firefox浏览器的驱动 driver=webdriver.Firefox(executable_path="G:\Anaconda3-5.3.0\geckodriver.exe") ######若是浏览器驱动的目录加入了环境变量的话 ## 若是是chrome浏览器的驱动 driver=webdriver.Chrome() ##若是是firefox浏览器的驱动 driver=webdriver.Firefox()
Selenium提供了8种定位方式
定位一个元素 | 定位多个元素 | 含义 |
---|---|---|
find_element_by_id | find_elements_by_id | 经过元素id定位 |
find_element_by_name | find_elements_by_name | 经过元素name定位 |
find_element_by_class_name | find_elements_by_class_name | 经过classname进行定位 |
find_element_by_tag_name | find_elements_by_tag_name | 经过标签订位 |
find_element_by_link_text | find_elements_by_link_tex | 经过完整超连接定位 |
find_element_by_partial_link_text | find_elements_by_partial_link_text | 经过部分连接定位 |
find_elements_by_css_selector | find_elements_by_css_selector | 经过css选择器进行定位 |
find_element_by_xpath | find_elements_by_xpath | 经过xpath表达式定位 |
例如:
<html> <body> <form id="loginForm"> <input name="username" type="text" classname="xie" id="key"/> <input name="password" type="password" 型号 /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> <a href="http://www.baidu.com">百度一下</a> </body> </html>
经过id进行定位第一个input框: find_element_by_id("key")
经过name进行定位第一个input框:find_element_by_name("username")
经过classname进行定位第一个input框:find_element_by_class_name("xie")
经过标签tag进行定位input框:find_element_by_tag_name("input") //这里input太多了,用input标签订位会出错
经过完整超连接定位a标签: find_element_by_link_text("百度一下")
用xpath进行定位:
用绝对路径进行定位,input[1]表明form下面的第一个input标签,从1开始, input=input[1] driver.find_elemant_by_xpath("//html/body/form/input[1]") 用相对路径进行定位,form标签下的第一个input标签,[1]省略了 driver.find_element_by_xpath("//form/input") 用相对路径和属性进行定位,form标签下的input标签的name值等于username的标签 driver.find_element_by_xpath("//form/input[@name='username']") 其余的属性值若是太长,也能够采起模糊方法定位 例如页面中有这么一个标签 <a href="http://www.baidu.com?name=admin&passwd=pass&action=login">百度一下</a> 则能够这么使用 driver.find_element_by_xpath("//a[contains(@href,'login')]")
以上是普通的状况,存在能够定位的属性,当某个元素的各个属性及其组合都不足以定位时,咱们能够利用其兄弟节点或者父节点等各类能够定位的元素进行定位,先看看xpath中支持的方法:
一、child 选取当前节点的全部子元素
二、parent 选取当前节点的父节点
三、descendant选取当前节点的全部后代元素(子、孙等)
四、ancestor 选取当前节点的全部先辈(父、祖父等)
五、descendant-or-self选取当前节点的全部后代元素(子、孙等)以及当前节点自己
六、ancestor-or-self 选取当前节点的全部先辈(父、祖父等)以及当前节点自己
七、preceding-sibling选取当前节点以前的全部同级节点
八、following-sibling选取当前节点以后的全部同级节点
九、preceding 选取文档中当前节点的开始标签以前的全部节点
十、following 选取文档中当前节点的结束标签以后的全部节点
十一、self 选取当前节点
十二、attribute 选取当前节点的全部属性
1三、namespace选取当前节点的全部命名空间节点
上图实例,须要点击订单号为17051915200001的发货按钮,这时候不能直接定位到发货按钮,而是要先定位到订单号元素,再定位他的兄弟节点。参照上图,咱们首先定位到td标签中包含订单号的td元素,而后选择其以后的同级节点,following-sibling,咱们要找的元素在后面的第8个td标签下,所以定位能够写名为下面的格式
driver.find_element_by_xpath("//td[contains(text(),’17051915200001’)]/following-sibling::td[8]/a[@class='link']")
可是若是页面中有两个相同的定位元素的话,咱们这样使用就有可能会报错
好比有下面两个输入框,一个输入用户名的,一个输入密码的,可是 class 都是等于 inputclass 。这时,若是咱们使用class_name 来定位元素的话,就会出现意想不到的错误
<input type="text" class="inputclass" name="username"> <input type="password" class="inputclass" name="password"><br/> #python代码 driver.find_element_by_class_name("inputclass").send_keys("admin") driver.find_element_by_class_name("inputclass").send_keys("password")
咱们的本意是在username框内输入admin,password框内输入 password 。可是因为两个框的 class 相同,而咱们又是使用class_name进行元素的定位,因此咱们全部的操做都会对第一个元素进行。
还有若是咱们定位的元素页面没有的话,也会报错
好比咱们使用这条语句用class_name来进行定位元素,可是当页面没有 class_name="aa" 的元素的话,就会报错,表示找不到经过 class name 方法找的元素 aa
driver.find_element_by_class_name("aa").send_keys("bb") NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"aa"}
import Select Select(driver.find_element_by_xpath("//select[@id='9560af43bfc949c4826d329c352e4eb6_class']")).select_by_index(4) #定位公共互联网环境
#切换到指定的iframe框架 driver.switch_to.frame("mainFrame") #切换iframe框架 driver.switch_to.default_content() #切换到主框架
上传文件使用的是AutoIt,安装好后,打开AutoIt Window Info,鼠标选中Finder Tool,而后鼠标左键按住拖到文件名框内,获得如图数据
而后鼠标选中Finder Tool,鼠标左键按住拖到打开按钮,获得如图数据
打开SciTE Script Editor,输入以下内容
WinWait("CLASS:#32770","",5) #设置5秒用于等待上传窗口的显示 ControlFocus("打开","","Edit1") #把输入焦点定位到上传文本框中 ControlSetText("打开","","Edit1","C:\Users\17250\Desktop\1.txt") #输入文件路径 Sleep(5000) #等待上传时间,单位毫秒 ControlClick("打开","","Button1"); #点击打开按钮,开始上传
保存为1.au3,点击Tools->Go运行。
而后打开Compile Script to .exe ,而后选中1.au3,它会自动将其转换为1.exe。
在python中使用
os.system("C:\\Users\\17250\\Desktop\\1.exe")
方法 | 说明 |
set_window_size() | 设置浏览器的大小 |
back() | 控制浏览器后退 |
forward() | 控制浏览器前进 |
refresh() | 刷新当前页面 |
clear() | 清除文本 |
send_keys (value) | 模拟按键输入 |
click() | 单击元素 |
submit() | 用于提交表单 |
get_attribute(name) | 获取元素属性值 |
is_displayed() | 设置该元素是否用户可见 |
size | 返回元素的尺寸 |
text | 获取元素的文本 |
在 WebDriver 中, 将这些关于鼠标操做的方法封装在 ActionChains 类提供。
方法 | 说明 |
---|---|
ActionChains(driver) | 构造ActionChains对象 |
context_click() | 执行鼠标悬停操做 |
move_to_element(above) | 右击 |
double_click() | 双击 |
drag_and_drop() | 拖动 |
move_to_element(above) | 执行鼠标悬停操做 |
context_click() | 用于模拟鼠标右键操做, 在调用时须要指定元素定位 |
perform() | 执行全部 ActionChains 中存储的行为,能够理解成是对整个操做的提交动做 |
Selenium中的Key模块为咱们提供了模拟键盘按键的方法,那就是send_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…Fn) | 键盘 F1…Fn |
不论是在作功能测试仍是自动化测试,最后一步须要拿实际结果与预期进行比较。这个比较的称之为断言。经过咱们获取title 、URL和text等信息进行断言。
属性 | 说明 |
---|---|
title | 用于得到当前页面的标题 |
current_url | 用户得到当前页面的URL |
text | 获取搜索条目的文本信息 |