selenium:如何通过div和label从嵌套输入中获取选中的复选框?

iq0todco  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(346)

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')]"))

但这有两个要素。

wvyml7n5

wvyml7n51#

虽然有两个元素具有属性 value="30078" 其中只有一个是可见的,而另一个包含属性 style="display: none; .
因此,要获得value属性设置为30078的visible/interactiable复选框,需要为 elementToBeClickable() 您可以使用以下任一定位器策略: cssSelector :

WebElement element = new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[id^='randomId'] input[value='30078']")));
``` `xpath` :

WebElement element = new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[starts-with(@id, 'randomId')]//input[@value='30078']")));


### 参考文献

您可以在以下内容中找到一些相关的讨论:
如何使用python在selenium中通过元素id名称的一部分查找元素
cotxawn7

cotxawn72#

如果需要获取复选框,则需要为标记编写xpath。
如果需要为以下内容编写xpath:

<label id="randomId_34_30078" style="display: none; width:47%; margin-right: 5px;">
    <input type="checkbox" value="30078" disabled="">First Text
</label>

你可以用

//div[@class="formClass"]/label/input[contains(text(),"First Text")]

相关问题