【Selenium】Xpath的几种写法,其实很容易。使用Xpath定位,根据12306的选择车票进行学习

Xpath的写法比较复杂,如果不经常使用,学会了一段时间后就会忘记。

博主初学时还是用的FireFox的2个小插件,后来谷歌浏览器自带“复制Xpath”功能,就更完全不会了。最近在学习一个例子“12306抢票”用到了Xpath,所有这里把学习到的知识记录下来。

网址:https://kyfw.12306.cn/otn/leftTicket/init,实现目标:

1.查询二等座有票的车次

2.打印车次名称

3.点击预定

首先,简单学习一下几个例子。

1.要定位到input输入密码这里,有几种写法

//form[@id="J_login_form"]/dl/dt/input[@id="J_password"]

1)如果从根目录开始,以/开始,比如/html;2)如果从中间开始,以双斜杠//开始;3)每个层级以单斜杠隔开;4)定位元素如果不唯一,需要用中括号[] 来进行精准描述定位

//form[@id="J_login_form"]//input[@id="J_password"]

使用双斜杠//,可以跨越多个层级填写元素,

//*[@id="J_login_form"]/*/*/input[@id="J_password"]

只要层级正确,可以使用*代替标签名称

2.要定位到退出

//a[contains(@href,"logout")]

使用模糊匹配,a标签里contains方法,href元素包含logout。

//a[starts-with(@rel,"nofo")]

这种方法很容易理解,以“nofo”开始的rel代码的a标签。

//a[contains(text(),"退出"]

根据文本关键词搜索

ends-with

结尾方法也可以。

现在可以进行本次的作业了。

网址:https://kyfw.12306.cn/otn/leftTicket/init,实现目标:

1.查询二等座有票的车次

2.打印车次名称

3.点击预定

查询有票的车次       //tbody[@id="queryLeftTable"]/tr/td[4][@class]

1)不是从/html开始,所以用双斜杠开始;

2)因为多个车次,我们选择二等座td[4];

3)td有2个条件,所以有2个[];

4)我们只选择有票的车次,查看有票和无票的代码区别,有票的包含class="yes" 或 class="t-num",前者是有大量票,后者是有部分数量的票。所有只要包含@class的td就是我们需要的内容。

打印上面的车次    //tbody[@id="queryLeftTable"]/tr/td[4][@class]/../td/div/div/div/a

1)前面的Xpath之前写过的

2)使用2个点..可以退回到父节点,即tr

3)3个div和a标签可以定位到车次,然后输出Xpath.text就可以找到车次名称

点击预定     //tbody[@id="queryLeftTable"]/tr/td[4][@class]/../td[13]/a

好了,就写到这里。说实话,不经常使用,真的容易忘记,建议可以经常使用CSS和Xpath来进行定位,因为其他都非常简单,而且CSS和Xpath也会用到id、name、text等。

大家加油,新年找到高薪工作。

发布了63 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/woshiyigerenlaide/article/details/104080735
今日推荐