Selenium Webdriver / XPath:如何按属性查找元素及其子文本

时间:2017-05-19 10:14:36

标签: xpath selenium-webdriver

给出html:

<div class="class1">
    <div class="class2">1 2 3</div>
    <div class="class3">a b c</div>
</div>

因为我的html中有几个div元素使用类“class1”而没有一个id我希望通过其子文本找到/获取这个父元素。

我尝试了不同的变种,比如

By.xpath("//div[contains(@class, 'class1') " 
    + "and text()[contains(.,'1 2 3')] "
    + "and text()[contains(.,'a b c')]]"));

但似乎没有任何效果。

在上面的例子中,我猜测了class1元素的文本,但没有检查它的子文本。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

因此,您正在寻找包含divclass1文字的孩子的1 2 3课程a b c。从你所尝试的例子来看,我假设孩子们没有其他条件(例如上课):

//div[@class='class1' and div/text()='1 2 3' and div/text()='a b c']

如果您不关心*是否div,您可以将这些子节点名称设为descendant::。如果您不要求儿童节点名称以import {Component} from 'angular2/core'; @Component({ selector: 'click-me', template: `<button (click)="onClickMe()">Hide A Friend Input</button>` }) 作为直接孩子,则可以使这些节点名称前缀为export class DuplicateComponent { onClickMe() { alert("try change type"); this.type = "hidden"; } }

答案 1 :(得分:1)

尝试以下任何一种xpath。

使用<div>代码的类属性。

//div[@class='class2']/..//div[@class='class3']/..//parent::div[@class='class1']

xpath的说明:首先使用class标记的<div>属性找到两个子元素,然后使用parent关键字<div>向前移动}标记以及class属性。

  

OR

使用文字方法和<div>代码。

//div[text()= '1 2 3']/..//div[text()= 'a b c']/..//parent::div[@class='class1']

xpath的说明:首先使用text标记的<div>方法查找两个子元素,然后使用parent关键字<div>继续前进}标记以及class属性。

以上xpath将找到您的父元素<div class="class1">