【Selenium】HTML/XML/XPATH基础

网页上单击右键→查看源文件/查看源代码

Html基本结构

<html> 为文档根元素,所有元素都在内部进行

  <head> 文档的头信息,不会在浏览器上显示

    ……

  </head>

  <body> 文档正文,显示浏览器上

    ……

  </body>

</html>

head中使用标签

<tittle></tittle>文档题目显示在标题栏中

<script></script>

<style></style>引用CSS样式

XML可扩展标记语言

http://www.yesky.com/imagesnew/software/html/index.html

XPath xml文档中查找信息的一种语言

http:www.w3school.com.cn/xpath/index.asp

/以斜线开始路径实例1

<AAA>

  <BBB/>

  <CCC/>

  <DDD>

    <BBB/>

  </DDD>

  <CCC/>

</AAA> XPath表达式:/AAA 选择根元素AAA

/以斜线开始路径实例2

<AAA>

  <BBB/>

  <CCC/>

  <DDD>

    <BBB/>

  </DDD>

  <CCC/>

</AAA> XPath表达式:/AAA/CCC 选择AAA的子元素CCC

/以斜线开始路径实例3

<AAA>

  <BBB/>

  <CCC/>

  <DDD>

    <BBB/>

  </DDD>

  <CCC/>

</AAA> XPath表达式:/AAA/DDD/BBB 选择AAA的子元素DDD的子元素BBB 绝对路径

//以双斜线开始路径实例1

<AAA>

  <BBB/>

  <CCC/>

  <BBB/>

  <DDD>

    <BBB/>

  </DDD>

<CCC/>

  <DDD>

    <BBB/>

    <BBB/>

  </DDD>

<CCC/>

</AAA> XPath表达式://BBB 选择所有BBB元素

//以双斜线开始路径实例2

<AAA>

  <BBB/>

  <CCC/>

  <BBB/>

  <DDD>

    <BBB/>

  </DDD>

<CCC/>

  <DDD>

    <BBB/>

    <BBB/>

  </DDD>

<CCC/>

</AAA> XPath表达式://DDD/BBB 选择所有父元素是DDD的BBB元素 相对路径

*以星号开始路径实例1

<AAA>

  <CCC/>

    <DDD>

      <BBB/>

      <BBB/>   

      <EEE/>

      <EEE/>

    </DDD>

  <CCC/>

</AAA> XPath表达式:/AAA/CCC/DDD/* 选择所有路径依附于/AAA/CCC/DDD/的元素

*以星号开始路径实例2

<AAA>

  <XXX/>

    <DDD>

      <BBB/>

      <BBB/>   

      <EEE/>

    </DDD>

  <XXX/>

  <CCC/>

    <BBB>

      <BBB/>

        <BBB/>   

      <BBB/>

    <BBB/>

  <CCC/>

</AAA> XPath表达式:/*/*/*/BBB 选择所有有3个祖先元素的BBB元素

*以星号开始路径实例3

<AAA>

  <CCC/>

    </DDD>

  <CCC/>

</AAA> XPath表达式://* 选择所有元素

[]使用方括号限定元素实例1

<AAA>

  <BBB/>

  <BBB/>

  <BBB/>

</AAA> XPath表达式:/AAA/BBB[1] 选择AAA的第一个BBB子元素

[]使用方括号限定元素实例2 索引号

<AAA>

  <BBB/>

  <BBB/>

  <BBB/>

</AAA> XPath表达式:/AAA/BBB[last()] 选择AAA的最后一个BBB子元素

[position<3]最前面两个

[price>35.00]

@通过@指定属性实例1

<AAA>

  <BBB id=“b1”/>

  <BBB id=“b2”/>

  <BBB name=“bbb”/>

  <BBB/>

</AAA> XPath表达式://@id 选择所有的id属性(注意,选取的是元素的属性,而不是元素)

@通过@指定属性实例2

<AAA>

  <BBB id=“b1”/>

  <BBB id=“b2”/>

  <BBB name=“bbb”/>

  <BBB/>

</AAA> XPath表达式://BBB[@id] 选择所有id属性的BBB元素(//BBB[@name] 选择所有name属性的BBB元素)

@通过@指定属性实例3

<AAA>

  <BBB id=“b1”/>

  <BBB id=“b2”/>

  <BBB name=“bbb”/>

  <BBB/>

</AAA> XPath表达式://BBB[@*] 选择有任意属性的BBB元素

@通过@指定属性实例4

<AAA>

  <BBB id=“b1”/>

  <BBB id=“b2”/>

  <BBB name=“bbb”/>

  <BBB/>

</AAA> XPath表达式://BBB[not(@*)] 选则没有属性的BBB元素

使用属性值作为选择准则1

<AAA>

  <BBB id=“b1”/>

  <BBB id=“b2”/>

  <BBB name=“bbb”/>

  <BBB/>

</AAA> XPath表达式://BBB[@] 选则含有属性id=‘b1’的BBB元素

使用模糊属性定位元素

//img[Starts-with(@alt,'dic1') 查找图片alt属性开始位置包含“div1”关键字的页面元素

//img[contains(@alt,'g1')] 查找图片alt属性包含“g1”关键字的页面元素

|使用分隔符“|”合并多个路径实例1

<AAA>

  <BBB/>

  <CCC/>

  <DDD>

    <CCC/>

  </DDD>

  <EEE/>

</AAA> XPath表达式:/AAA/EEE|//DDD/CCC|AAA|//BBB 合并没有限制

使用页面元素文本的文本来定位

//a[text()='百度搜索']:文字匹配

//a[contains(text(),'百度')],包含文字

//aa[contains(text(),'百度')]/preceding::div

XPath轴(Axis)

parent:上层父节点 //img[@alt='div2-img2']/parent::div 查找到alt属性值为div2-img2的图片,并基于图片位置找到他上一级的div页面元素

clild :当前节点的下层子节点 //img[@]child::img 查找到id属性值为div1的div页面元素,并基于div的位置找到他下层节点中img页面元素

child::text():当前节点的所有文本子节点

child::node():当前节点的所有子节点

child::*/child::price:当前节点的所有 price 孙节点

ancestor:当前节点所有上层节点 //img[@alt='div2-img2']/ancestor::div 查找到alt属性值为div2-img2的图片,并基于图片位置找到他上级的div页面元素

ancestor-or-self:当前节点的所有先辈(父、祖父等)以及当前节点本身

descendant:当前节点所有下层节点 //img[@name='div2']/descendant::img 查找到name属性值为div页面元素,并基于div的位置找到他下级所有节点中的img页面元素

descendant-or-self:当前节点的所有后代元素(子、孙等)以及当前节点本身。

following:当前节点之后显示的所有节点 //div[@]/following::img 查找到id属性值为div1的div页面元素,并基于div位置找到他后面节点的img页面元素

following-sibling:当前节点的之后所有平级节点//a[@href='www.com']/following-sibling::input查找到链接的页面元素,并基于链接位置找到他后面节点中的input页面元素

preceding:当前节点前面的所有节点 //img[@alt='div2-img2']/preceding::div 查找到alt属性值为div2-img2的图片,并基于图片位置找到他前面节点的div页面元素

preceding-sibling:当前节点前面的所有平级节点//img[@alt='div2-img2']/preceding-sibling::a[1]查找属性为div2-img2的图片,并基于图片位置找到他前面平级节点中的页面元素

attribute:当前节点的所有属性。

namespace:当前节点的所有命名空间节点。

self:当前节点。

运算符

|计算两个节点集//book | //cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80

如果 price 是 9.80,则返回 true。

如果 price 是 9.90,则返回 false。

!=不等于price!=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。

<小于price<9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。

<=小于或等于price<=9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。

>大于price>9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。

>=大于或等于price>=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.70,则返回 false。

orprice=9.80 or price=9.70

如果 price 是 9.80,则返回 true。

如果 price 是 9.50,则返回 false。

andprice>9.00 and price<9.90

如果 price 是 9.80,则返回 true。

如果 price 是 8.50,则返回 false。

mod计算除法的余数5 mod 21