html块优先:
<div class="formClass" style="line-height: 18px; display: block;">
<label id="randomId_34_30078" style="display: none; width:47%; margin-right: 5px;">
<input type="checkbox" value="30078" disabled="">First Text
</label>
<label id="randomId_34_30077" style="display: none; width:47%; margin-right: 5px;">
<input type="checkbox" value="30077" disabled="">Second Text
</label>
<label id="randomId_32_30078" style="display: inline-block; width:47%; margin-right: 5px; vertical-align: top;">
<div style="display: inline-block; width: 10%; float: left;">
<input type="checkbox" value="30078" disabled="" checked="">
</div>
<div style="display: inline-block; width: 90%; float: right;">
First Text
</div>
</label>
<label id="randomId_32_30077" style="display: inline-block; width:47%; margin-right: 5px; vertical-align: top;">
<div style="display: inline-block; width: 10%; float: left;">
<input type="checkbox" value="30077" disabled="">
</div>
<div style="display: inline-block; width: 90%; float: right;">
Second Text
</div>
</label>
</div>
我想在上面的html部分中获取值为“30078”的复选框。标签的id是随机的,输入/复选框的值也是随机的。这是一个遗留项目。我不能修改结构。
我试过这个:
driver.findElement(By.className("formClass"))
.findElement(By.xpath("//label//div[contains(text(), 'First Text')]"))
但这有两个要素。
2条答案
按热度按时间wvyml7n51#
虽然有两个元素具有属性
value="30078"
其中只有一个是可见的,而另一个包含属性style="display: none;
.因此,要获得value属性设置为30078的visible/interactiable复选框,需要为
elementToBeClickable()
您可以使用以下任一定位器策略:cssSelector
:WebElement element = new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[starts-with(@id, 'randomId')]//input[@value='30078']")));
cotxawn72#
如果需要获取复选框,则需要为标记编写xpath。
如果需要为以下内容编写xpath:
你可以用