自动化测试
自动化测试(WebDriver API)
1 浏览器的操作
1.1控制浏览器窗口的大小
设置大小:driver.set_window_size(400,800)
浏览器最大化:
driver.maxsize_windoe()
注意:无法最小化浏览器窗口
1.2浏览器前进后退刷新
后退:driver.back()
前进:driver.forward()
刷新:driver.refresh()
1.3获获取当前页面取浏览器的标题和URL
获取当前页面的URL:driver.current_url
获取当前页的title:driver.title
1.4切换句柄
案例
driver.window_handles
driver.current_window_handle
driver.switch_to.window(handles[-1])
2 网页元素定位
2.1网页元素定位
几种常用网页元素定位方法
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_test()
find_element_by_partical_link_test()
Xpath定位:find_element_by_xpath()
CSS定位:下面会详细说明
案例 QQ邮箱登录
2.2 Xpath定位
2.2.1 绝对路径定位
find_element_by_xpath("/html/body/div/div/div/div/form/span/input")
(好麻烦)
标签名的层级关系来定位元素,如果同一层级下有多个相同的标签名,用序号标识第几个如:div[2]
2.2.2 利用元素属性定位
以百度输入框为例
find_element_by_xpath("//input[@id=‘kw’]")
2.2.3 层级与属性结合
find_element_by_xpath("//span[@class=‘bg s_ipt_wr’]/input")
2.2.4 使用逻辑运算符
如果一个属性不能唯一区分一个元素,可以使用逻辑运算符连接多个属性查找元素
find_element_by_xpath("//input[@id=‘kw’ and @class=‘su’]")
2.2.5 使用contains方法
driver.find_element_by_xpath("//span[conatains(@class,‘s_ipt_wr’)]/input").send_keys(“hello”)
2.2.6 使用text(方法)
driver.find_element_by_xpath("//a[text()=‘新闻’]").click()
当然,contains和text()也可以配合使用
driver.find_element_by_xpath("//[contains(text(),‘selenium’)]").click()
2.3 CSS定位(参照CSS选择器)
以百度输入框和搜索按钮为例
2.3.1 通过class属性定位
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector(".bg_ s_tn")
2.3.2 通过id属性定位
find_element_by_css_selector("#kw")
find_element_by_css_selector("#su")
2.3.3 通过标签名来定位(重复概率大,不建议使用)
find_element_by_css_selector(“input”)
2.3.4 通过父子关系定位
find_element_by_css_selector(“span>input”)
2.3.5 通过属性定位
find_element_by_css_selector("[name=‘wd’]")
2.3.6 组合定位
find_element_by_css_selector(“form#form>span>input#kw”)
要定位一个元素,标签名为input,次元素的id属性为kw;并且此元素有个父元素为span,span还有个父元素为form,而且form元素的id属性为form。
2.3.7 更多定位用法
查找id属性包含“kw”字符串的元素:
find_element_by_css_selector("[id*=‘kw’]")
查找id属性以“kw”字符串开头的元素:
find_element_by_css_selector("[id^=‘kw’]")
查找id属性以“kw”字符串结尾的元素:
find_element_by_css_selector("[id$=‘kw’]")
查找form标签下面2个input标签的元素:
find_element_by_css_selector(“form>input:nth-child(2)”)
• 选择id 为radio 的div 下的第4 个input 节点之后挨着的 label节点
div#radio>input:nth-of-type(4)~label
• css同样也可以实现逻辑运算,同时匹配两个属性,这里跟xpath不一样,无需写and关键字
[type=‘checkbox’][name=‘checkbox1’]
• 正方向范围, 选中从第6个开始的子元素
li:nth-child(n+6)
• 负方向范围,选中从第1个到第9个子元素。就相当让你选中第9个和其之前的所有子元素
li:nth-child(-n+9)
• 前后限制范围
li:nth-child(n+4):nth-child(-n+8)
选中第4-8个子元素。使用 nth-child(n+4):nth-child(-n+8) 我们可以选中某一范围内子元素,上面的例子里是从第4个到第8个子元素