赞
踩
根据name定位,name元素可能不是唯一的。如果出现重名的元素,定位有可能不准确
如果只出现一次就可以精准定位
根据name定位,name元素可能不是唯一的。如果出现重名的元素,定位有可能不准确
如果只出现一次就可以精准定位
link_text 只能使用精准的匹配(a标签的全部文本内容)。
link_text定位:必须根据链接上完整的文本内容去进行定位。
partial_link_text可以使用精准或模糊匹配,如果使用模糊匹配最好能使用可以唯一的关键字;如果有多个值,默认返回第一个值。
partial_link_text定位:定位的链接文本内容在整个页面当中唯一的出现一次,那么可以准确定位到元素,否则默认返回第一个值。
模糊定位
1.绝对路径
语法:以单斜杠开头逐级开始编写,不能跳级。如:("html/body/div/div/form/input")
driver.find_element(By.XPATH, "html/body/div/form/fieldset/table/tbody/tr/td/input").send_keys("admin")
2.相对路径
相对路径是只给出元素路径的部分信息,在 html 的任意层次中寻找符合条件的元素。(元素名不知道,可用*)语法:以双斜杠开头,双斜杠后边跟元素名称。如://input
3.路径结合属性方式
语法://input[@id='id值']
driver.find_element(By.XPATH, "//input[@id='Password1']").send_keys("123456789")
4.全部文本信息匹配方式
语法://a[text()="新闻"],标签为a文本信息为"新闻"
driver.find_element(By.XPATH, "//a[text()='新闻']").click()
5.部分文本包含方式(模糊匹配)
语法://a[contains(text(),"新")] 或者 //a[contains(text(),"闻")]
driver.find_element(By.XPATH, "//a[contains(text(), '新')]").click()
6.路径结合逻辑
语法://标签名[@属性名='属性值' and @属性名='属性值']
driver.find_element(By.XPATH, "//input[@name='Name' and @id='t2']").send_keys("第二个姓名")
css和xpath
css比xpath效率高一点
有前端配合选css,没有就选xpath
//*[@id="kw"]
层级和属性
/ (开头)根路径 /html/body
// (开头,中间) 任意层级
* (任意元素)
@(根据属性筛选)
/ (中间)下一级 /html/body
. (同级)
..(上一级)
开发者工具——控制台——$x 进行xpath调试
7.通过父级定位子级元素
语法://标签名(或*)[@父级属性名='父级属性值']/input
driver.find_element(By.XPATH, "//td[@id='id1']/input").send_keys("通过父级定位到子级")
8.直接复制xpath
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("神话")
class属性必须唯一
driver.find_element(By.CSS_SELECTOR, "s_ipt").send_keys("class")
标签名必须唯一
driver.find_element(By.CSS_SELECTOR, "textarea").send_keys("这是元素选择器定位。")
多元素选择器(同时定位到姓名和密码输入框,之间用逗号隔开)
find_elements(By.CSS_SELECTOR, "元素")返回的是一个列表类型的元素,如果想定位到具体的元素,可以通过索引去拿(索引是从0开始)
driver.find_elements(By.CSS_SELECTOR, "#t1,.passwd")[1].send_keys("5201314")
子元素选择器(定位到多行文本输入框,简介)
# 子元素选择器是必须直接子级才可以定位,隔代则定位不了
driver.find_element(By.CSS_SELECTOR, "td>textarea").send_keys("子元素选择器定位。"
匹配所有属于E元素后代的F元素,E和F之间用空格分隔)
后代选择器(定位到多行文本输入框,简介)
# 后代选择器,可以隔代,可以通过父与子的关系定位,还可以通过爷爷与孙子的关系定位
driver.find_element(By.CSS_SELECTOR, "tr textarea").send_keys("这是后代选择器定位。")
E+F(匹配紧随E元素之后的同级元素F,只匹配第一个)
driver.find_element(By.CSS_SELECTOR, "p+input").send_keys("毗邻元素选择器")
同级元素器E~F(E~F匹配所有在E元素之后的同级F元素)
driver.find_elements(By.CSS_SELECTOR, "p~input")[1].send_keys("同级元素选择器")
(指定标签名下的符合[]里面属性条件的元素,区分大小写)
标签结合属性定位元素:标签名[属性名='属性值']
driver.find_element(By.CSS_SELECTOR, "input[id='Password1']").send_keys("123456789")
属性的值包括a 的指定标签的元素
css定位方式:标签名结合属性定位元素:标签名[属性名*='a'](属性值包含a)
# 案例:定位到第一个表单注册页面的密码输入框
driver.find_element(By.CSS_SELECTOR, "input[name*='w']").send_keys("123456789")
标签名结合多个属性定位:标签名[属性1='a'][属性2*='b']
# 案例:定位到第一个表单注册页面的姓名2输入框
driver.find_element(By.CSS_SELECTOR, "input[name='Name'][id='t2']").send_keys("123456789")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。