阅读时间: 3 分钟
在Selenium自动化中,如果元素没有被一般的定位器如id,class,name等找到,那么XPath被用来寻找网页上的一个元素。在这篇博客中,我们将专注于高级定位器功能,如包含,同胞,祖先和Selenium AND/OR,孩子,父母 ,他们是XPath 1.0库的功能。我们已经在之前的博客中讨论了关于定位器和xpath。你可以看一下这里。通过这些函数的组合,我们可以在Selenium中创建更具体的XPath。其中一些是:-
Selenium中的Contains()
Contains()是Xpath表达式中的一个函数,用于识别一个元素,当我们熟悉一个元素的某些部分属性值的时候。我们可以使用XPath contains()函数在整个网页上提取所有符合给定文本值的元素。Contains可以找到部分文本的元素。
通过XPath- Using contains()方法定位元素的语法可以写成。
//<HTML tag>[contains(@attribute_name,'attribute_value')]
or
//*[contains(@attribute_name,'attribute_value')]
使用XPath- conatins()方法,我们可以将Java代码与动态XPath定位一起写成。
findElement(By.xpath("//a[contains(text(),'LEARN MORE')]")
Selenium中的兄弟姐妹
Selenium Webdriver中的Sibling是一个用于获取网络元素的函数,它是父元素的兄弟姐妹。它确定了上下文节点的兄弟姐妹。这些兄弟姐妹应该位于现有节点的相同级别,并且应该有相同的父元素。
| 后面的 | 包含在上下文节点之后出现的所有节点,按文档顺序排列 |
| following-sibling | 选择当前节点之后的所有兄弟姐妹 |
| 前面的 | 包含所有出现在上下文节点之前的节点,按文档顺序排列 |
| 前面的兄弟姐妹 | 包含上下文节点的前面的兄弟姐妹。 |
//input[@id='email']/following::*
//select[@id='day']/following-sibling::*
//input[@id='pass']/preceding::tr
//select[@id='item']/preceding-sibling::*
Selenium中的祖先
为了在父元素的基础上找到一个元素,我们可以使用XPath的祖先属性。父轴最多只包含一个节点。
| 祖先 | 选择当前节点的所有祖先(父,祖父,等)。 |
| ancestor-or-self | 选择当前节点的所有祖先(父辈、祖辈等)和当前节点本身。 |
//div[.//a[text()='KNOLDUS']]/ancestor::div[@class='rt-grid-2 rt-omega']
Selenium中的父节点
Selenium中的父节点是一种用于检索网页中选择的当前节点的父节点的方法。父轴最多只包含一个节点。父节点可以是根节点,也可以是元素节点。
根节点没有父节点;因此,当上下文节点是根节点时,父轴是空的。对于所有其他元素节点,父轴包含一个节点。
| 父节点 | 选择当前节点的父节点 |
parent::node()
The below example will selects the parent node of the input tag of Id='email'.
Ex: //input[@id='email']/parent::*
the above can also be re-written as
//input[@id='email']/..
Xpath=//*[@id='rt-feature']//parent::div
在Selenium中使用AND和OR
OR 表达式使用两个条件,第一个条件或第二个条件是否为真。它也适用于任何一个条件为真,或者可能两个条件都为真。这意味着任何一个条件都应该是真的,才能找到这个元素。
在下面的XPath中,它确定了单个或两个条件都是真的元素。
XPath=//*[@id='FirstName' or @name='LastName']
突出显示这两个元素,因为'First Name'元素有属性'id','Last Name'元素有属性'name'。
AND 表达式使用两个条件。两个条件都应该为真,才能找到该元素。如果任何一个条件是假的,它就不能找到该元素。
XPath=//*[@id='FirstName' and @name='FirstName']
在下面的表达式中,我们强调了'First Name'元素,因为它有'id'和'name'两个属性。
Xpath=//*[@type='submit' OR @name='btnReset']
Xpath=//input[@type='submit' and @name='btnLogin']
是时候说再见了。我希望你喜欢这个博客。更多此类有趣的博客,请继续浏览Knoldus博客页面