一、页面元素定位及操作
什么是页面元素:在浏览上能看到的所有要素,如图片、文本框、按钮、下拉列表、视频等。
自动化是干嘛的?代码控制浏览器上的元素,让这些元素“动”起来(按照脚本设计逻辑在执行)
自动化测试的主要步骤:
1、通过某些方式定位到我们要执行的对象、目标(target)
2、对这个对象进行什么操作(command)
3、通过操作对定位到的元素赋值(value)
4、添加断言操作
webdriver提供的定位元素方式有:
-
id属性定位—>find_element_by_id(“id属性值”)
-
name属性定位—>find_element_by_name(“name属性值”)
-
class name属性定位—>find_element_by_class_name(“id值”)
-
link text:—>find_element_by_link_text(“链接的显示文本”)
-
tag name:—>find_element_by_tag_name(“标签名”)
-
partial link text:—>find_element_by_partial_link_text(“部分链接的显示文本”)
-
xpath:find_element_by_xpath(“xpath”)
-
css:find_element_by_css_selector(“css”)
测试使用id属性定位
"""
需求:百度文本框输入selenium,点击百度一下
1、百度文本框77
2、百度一下
使用ID属性定位:
1、确定要操作的对象
2、获取id属性(kw/su)
3、其他操作
"""
#导包、创建浏览器对象,获取一下url地址
from selenium import webdriver
#driver:就是一个普通的变量,dr也行
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#通过ID来定位文本框和百度一下
driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(2)
driver.find_element_by_id("su").click()
time.sleep(2)
#退出浏览器对象
driver.quit()
使用id属性和name,class属性定位方法一样,下面讲一下使用link text和partial link text定位
元素定位
#导包、创建浏览器对象,获取一下url地址
from selenium import webdriver
#driver:就是一个普通的变量,dr也行
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#通过元素定位文本框和百度一下
driver.find_element_by_link_text("新闻").click()
time.sleep(5)
driver.find_element_by_partial_link_text("病毒溯源全球").click()
#退出浏览器对象
driver.quit()
link text需要完整的链接标题,而partial link text则需要部分就可以定位。
绝对路径定位
/:根节点
//:相对节点
百度文本框对应的绝对路径:
父子节点使用/链接(在树状结构上有明显的所属关系)
同标签名的节点是兄弟节点,使用[ ]排名次,老大排第一位[1],老二加[2],(标签名一样),老大的不用写也行
driver.find_element_by_xpath("/html/body/div/div/div[3]/div/div/form/span/input")
绝对路径太麻烦了,一般不推荐使用
利用元素属性定位
find_element_by_xpath(“//input[@id='kw']”)
层级与属性结合
find_element_by_xpath(“//from[@id='form']/span[1]/input")
逻辑运算符
find_element_by_xpath(“//input[@id='kw' and@class=‘su']")
css定位
.表示类选择器
driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")
driver.find_element_by_id("su").click()
#表示id选择器
driver.find_element_by_css_selector("#su").click()
定位到元素之后,我们能做些什么事情呢?
clear():清除文本 -----用于输错之后的清除功能
send_keys(value):模拟按键输入,除了能够发送字母外,还可以发送快捷键
click():单击元素,例如按钮,超链接、单选框、复选框操作
current_url:返回当前页面的url地址
title:返回当前页面的title
Text:获取页面(提示框、警告框)显示的文本,或者是一些页面元素上的显示文本
get_attribute(name):获取属性值,文本框中的值使用value属性名
is_displayed():设置该元素是否用户可见,结果就是真和假
is_enabled():判断是否可用
is_selected:判断是否选中,使用复选框或单选框的判断
driver.close():只关掉一个窗口,而且关掉的是前一个
driver.quit():关闭浏览器,不管页面有几个窗口,都关掉
句柄(handler):每一个页面都一个值,对一个页面来说是唯一,是页面的一个标识
driver是要绑定句柄的,你的driver只能控制你绑定句柄的这个页面
获取当前窗口的句柄:driver.current_window_handle
1、打开淘宝网
2、点击聚划算,进入聚划算页面
3、选择“女装”,进入女装页面
4、返回到聚划算页面
#导包、创建浏览器对象,获取一下url地址
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.taobao.com")
#通过ID来定位文本框和百度一下
driver.find_element_by_partial_link_text("聚划算").click()
time.sleep(2)
driver.find_element_by_partial_link_text("女装").click()
time.sleep(2)
driver.back()
这里的“女装”就是淘宝页面的,不是从聚划算里面的女装
如果就是想点聚划算里面的女装怎么办?
将聚划算里面的句柄绑定给driver
1、拿到聚划算的句柄
driver.window_handle 可以拿到浏览器中打开的窗口的所有句柄
2、将句柄绑定给driver
#获取所有打开窗口的句柄
handles=driver.window_handle
#将聚划算的句柄绑定给driver
driver.switch_to_window(handlers[1])