首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium复合元素对兄弟姐妹子元素的测定

Selenium复合元素对兄弟姐妹子元素的测定
EN

Stack Overflow用户
提问于 2013-10-20 00:35:07
回答 1查看 3K关注 0票数 1

我试图在页面上找到一个特定的元素,但找不出要使用的合适的Xpath。

下面是HTML (请注意,每个div的位置可能有所不同):

代码语言:javascript
复制
    <div>
     <label>First Name</label>
     <span class="metadataField metadataFieldReadonly">
      <input type="text" name="some-random-value" value="John">
     </span>
    </div>
    <div>
     <label>Last Name</label>
     <span class="metadataField metadataFieldReadonly">
      <input type="text" name="some-random-value" value="Smith">
     </span>
    </div>

因此,我试图将输入元素// div /span@class='metadataField metadataFieldReadonly'/input在具有//div/labeltext()=‘姓氏’的div中找到。

我可以用它成功地定位标签(使用JAVA):

代码语言:javascript
复制
    driver.findElement(By.xpath("//div/label[text()='Last Name']")).click();

我可以成功地在第一个元素下找到第一个输入(但我可能并不总是想要第一个元素):

代码语言:javascript
复制
    driver.findElement(By.xpath("//div/span[@class='metadataField metadataFieldReadonly']/input")).click();

因此,问题在于:(i)输入的名称标记和值总是不同的,因此不能使用它们来选择元素;(ii)带有姓氏标签的div可能并不总是第二个元素,(iii)标签和span是相同的级别(兄弟姐妹),因此我无法确定如何正确创建Xpath语句。

所以用一句话来说,我需要在同一个div中找到span的输入,这个div中有一个标签“Last”。

因此,我需要知道如何将这两个XPath语句组合成一个复杂语句(假设它们位于同一个div中,并且标签和span是兄弟):

代码语言:javascript
复制
    //div/label[text()='Last Name']
    //div/span[@class='metadataField metadataFieldReadonly']/input

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-20 01:14:10

这是非常简单的://div[label[text()='Last Name']]/span[@class='metadataField metadataFieldReadonly']/input -字面意思是“包含在span中的input和包含在div中的metadataFieldmetadataFieldReadonly类,其中包含了带有文本'Last‘的label”。因此,您使用标签定位div,然后从它构建到您想要的输入。

为了更加健壮,您不应该依赖于类名的排序--这并不是规范所保证的。所以像这样的东西会更强大://div[label[text()='Last Name']]/span[contains(concat(' ', @class,' '),' metadataField ') and contains(concat(' ',@class,' '),' metadataFieldReadonly ')]/input

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19472649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档