您现在的位置是:网站首页 > 博客日记 >

xpath学习笔记

作者:YXN-python 阅读量:78 发布日期:2024-05-15

xpath语法

1.依靠自己的属性,文本定位

//td[text()='Data Import']

//div[contains(@class,'cux-rightArrowIcon-on')]

//a[text()='马上注册']

//input[@type='radio' and @value='1']  多条件

//span[@name='bruce'][text()='bruce1'][1]  多条件

 //span[@id='bruce1' or text()='bruce2']  找出多个

 //span[text()='bruce1' and text()='bruce2']  找出多个

2.依靠父节点定位

//div[@class='x-grid-col-name x-grid-cell-inner']/div

//div[@id='dynamicGridTestInstanceformclearuxformdiv']/div

//div[@id='test']/input

3.依靠子节点定位

//div[div[@id='navigation']]

//div[div[@name='listType']]

//div[p[@name='testname']]

4.混合型

//div[div[@name='listType']]//img

//td[a//font[contains(text(),'seleleium2从零开始 视屏')]]//input[@type='checkbox']    包含特定文本的字体元素内的复选框输入元素

5.进阶部分

 //input[@id='123']/following-sibling::input 找下一个兄弟节点

 //input[@id='123']/preceding-sibling::span上一个兄弟节点

 //input[starts-with(@id,'123')] 以什么开头

 //span[not(contains(text(),'xpath'))]不包含xpath字段的span

6.索引

//div/input[2]

//div[@id='position']/span[3]

//div[@id='position']/span[position()=3]

//div[@id='position']/span[position()>3]

//div[@id='position']/span[position()<3]

//div[@id='position']/span[last()]

//div[@id='position']/span[last()-1]

7.substring 截取判断

<div data-for="result" id="swfEveryCookieWrap"></div>
//*[substring(@id,4,5)='Every']/@id截取该属性 定位3,取长度5的字符 

//*[substring(@id,4)='EveryCookieWrap']截取该属性从定位3 到最后的字符 

//*[substring-before(@id,'C')='swfEvery']/@id 属性 'C'之前的字符匹配

//*[substring-after(@id,'C')='ookieWrap']/@id 属性'C之后的字符匹配

8.通配符*

//span[@*='bruce']

//*[@name='bruce']

9.轴

//div[span[text()='+++current node']]/parent::div  找父节点

//div[span[text()='+++current node']]/ancestor::div  找祖先节点

10.孙子节点

//div[span[text()='current note']]/descendant::div/span[text()='123']

//div[span[text()='current note']]//div/span[text()='123']  两个表达的意思一样

11.following pre

//span[@class="fk fk_cur"]/../following::a   往下的所有a

//span[@class="fk fk_cur"]/../preceding::a[1]  往上的所有a

xpath提取多个标签下的text

如果我有一百段这样类似的html代码,内部的标签不固定,又如何使用xpath表达式,以最快最方便的方式提取出来?

对于如下的代码:

<div id="test3">
	我左青龙,
	<span id="tiger">
		右白虎,
        <ul>上朱雀,
            <li>下玄武。</li>
        </ul>
        老牛在当中,
	</span>
	龙头在胸口。
<div>

使用xpath的string(.)

data = selector.xpath('//div[@id="test3"]')
info = data.xpath('string(.)').extract()[0]

这样,就可以把“我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口”整个句子提取出来,赋值给info变量。

模糊查询 contains

目前许多web框架,都是动态生成界面的元素id,因此在每次操作相同界面时,ID都是变化的,这样为自动化测试造成了一定的影响。

<div class="eleWrapper" title="请输入用户名">
	<input type="text" class="textfield" name="ID9sLJQnkQyLGLhYShhlJ6gPzHLgvhpKpLzp2Tyh4hyb1b4pnvzxFR!-166749344!1357374592067" id="nt1357374592068"  />
</div>

解决方法使用xpath的匹配功能,//input[contains(@id,'nt')]

测试使用的XML

<Root>
    <Person ID="1001">
        <Name lang="zh-cn">张城斌</Name>
        <Email xmlns="www.quicklearn.cn">cbcye@live.com</Email>
        <Blog>http://cbcye.cnblogs.com</Blog>
    </Person>
    <Person ID="1002">
        <Name lang="en">Gary Zhang</Name>
        <Email xmlns="www.quicklearn.cn">GaryZhang@cbcye.com</Email>
        <Blog>http://www.quicklearn.cn</Blog>
    </Person>
</Root>

查询所有Blog节点值中带有 cn 字符串的Person节点Xpath表达式:

/Root//Person[contains(Blog,'cn')]

2.查询所有Blog节点值中带有 cn 字符串并且属性ID值中有01的Person节点

Xpath表达式:

/Root//Person[contains(Blog,'cn') and contains(@ID,'01')]

 

YXN-python

2024-05-15