我试图在页面上找到一个特定的元素,但找不出要使用的合适的Xpath。
下面是HTML (请注意,每个div的位置可能有所不同):
<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):
driver.findElement(By.xpath("//div/label[text()='Last Name']")).click();我可以成功地在第一个元素下找到第一个输入(但我可能并不总是想要第一个元素):
driver.findElement(By.xpath("//div/span[@class='metadataField metadataFieldReadonly']/input")).click();因此,问题在于:(i)输入的名称标记和值总是不同的,因此不能使用它们来选择元素;(ii)带有姓氏标签的div可能并不总是第二个元素,(iii)标签和span是相同的级别(兄弟姐妹),因此我无法确定如何正确创建Xpath语句。
所以用一句话来说,我需要在同一个div中找到span的输入,这个div中有一个标签“Last”。
因此,我需要知道如何将这两个XPath语句组合成一个复杂语句(假设它们位于同一个div中,并且标签和span是兄弟):
//div/label[text()='Last Name']
//div/span[@class='metadataField metadataFieldReadonly']/input谢谢
发布于 2013-10-20 01:14:10
这是非常简单的://div[label[text()='Last Name']]/span[@class='metadataField metadataFieldReadonly']/input -字面意思是“包含在span中的input和包含在div中的metadataField和metadataFieldReadonly类,其中包含了带有文本'Last‘的label”。因此,您使用标签定位div,然后从它构建到您想要的输入。
为了更加健壮,您不应该依赖于类名的排序--这并不是规范所保证的。所以像这样的东西会更强大://div[label[text()='Last Name']]/span[contains(concat(' ', @class,' '),' metadataField ') and contains(concat(' ',@class,' '),' metadataFieldReadonly ')]/input。
https://stackoverflow.com/questions/19472649
复制相似问题