Selenium(2)-webUI自动化的Xpath及CSS定位

xpath定位法

官方学习XPath 教程:https://www.w3school.com.cn/xpath/index.asp
xpath定位法:是指基于元素的路径的定位方法
语法:driver.find_element_by_xpath('Xpath的策略')
常用的xpath定位策略:

1、绝对路径定位法(/)
2、相对路径定位法(//)
3、属性定位法(路径结合属性)
4、函数定位法
5、轴定位法
6、逻辑运算符(路径结合逻辑)

获取xpath路径的方法:
1、F12打开开发者工具,点击(选择)你需要定位的对象
2、在对应的代码中右键选择复制

获取元素路径

1、绝对路径:从根节点/html,逐级往下(不跳跃),例如:/html/body/div/div/form/input[1]2、相对路径: //input 表示所有input标签,例如://*[@id="kw"]3、属性法: [@属性='属性值'],例如://*[@id="kw"]//input[@name='password']4、函数法
1)starts-with(@属性名,'属性开头的值'):定位属性以xxx开头的元素,处理属性值变化的元素,例如://*[starts-with(@id,'username')]
2)contains(@属性名,'属性包含的值'):匹配属性包含的值,例如://*[contains(@id,'username')]
3)text()='文本的值':# 定位文本值等于XXX的元素 ,可以替代link_text方法,一般适合 p标签,a标签。例如://a[text()='百度搜索']
4)contains(text(),'文本包含的值'):匹配文本包含的值,可以替代partial_link_text方法,例如://a[contains(text(),'搜索')]4、轴对称法
语法:轴名称::节点测试[谓语]

轴对称法
轴对称实例


实例:

# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')
# 需求
# driver.find_element_by_xpath("//*[text()='新闻']").click()
# driver.find_element_by_xpath("//*[contains(@autocomplete,'f')]").send_keys('selenium')
driver.find_element_by_xpath("//*[starts-with(@autocomplete,'o')]").send_keys('selenium')
sleep(3)
# 关闭网页
driver.quit()

5、逻辑运算符
在selenium中一般用and来缩小范围(反之or是扩大范围),定位到具体的元素,但xpath本身支持其他运算符

//*[@id='username' and @type='text']

css seletor定位法

官方文件:https://www.w3school.com.cn/cssref/css_selectors.asp
css 定位法特点:
1、速度快
2、是Chrome与Firefox的默认显示语法,Firefox对css支持最好
3、css相对xpath无法实现text的定位
4、数字开头的id的值用css定位会出现问题
5、css不支持多属性用逻辑运算符来组合定位,如:

[name='username   and  id='username'] # 是无效的
[id='username'][name='username']  #有效

css定位器如下:

名称表达式示例描述
类型选择器(标签)tag namep所有p标签
id选择器#id#usermnameid的值为username
类选择器.class1.class2
tagname#id.class
.pn.vm
input#usemame.pn.vm
class1的值是pn,class2的值是vm
class1的值是pn,class2的值是vm,且id的值是username的input标球
路径选择器:子代nod1>nod2html>body>divhtml下的body标签下的div标签 (子代元)
路径选择器:后代nod1 node2html inputhtml下的任意input标签 (后代元)
路径选择器:相邻弟弟(二弟)node1+node2html>head+bodyhtml下跟head紧挨着的body
路径选择器:弟弟node1~node2div~pdiv与p同级,p在div后面不一定紧挨着
属性选择器[属性名="属性值]
[属性名^="属性值"]
[属性名$="属性值"]
[属性名*="属性值"]
inpu[lid='username']
input[names^='usemname']
input[names$='ername']
input[name*='erna']
id属性值为username的input标签(id唯一则input可以不写),且class的属性必须填写完整
开头是
结尾是
包含
伪类选择器:第几个元素tagname.nth-child(n)body>div.nth-child(3)body下的第三个标签是div (不是第三个div)
伪类选择器第一个子元素first-childbody>.first-childbody下的第一个标签
伪类选择器:最后一个:last-childbody>:last-childbody下的最后一个标签
伪类选择器:倒数第几个元nth-last-childbody>div:nth-last-child(4)body下的倒数第四个标签是div (不是第4个div),也不区分大小写
伪类选择器:唯一元素.only-childinput:only-child每个节点下的唯一一个input标签(父节点只有一个标签)

xpath与css语法对比

xpath与css语法对比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

媛媛要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值