isEnabled()方法始终返回true

时间:2019-01-30 15:58:12

标签: java selenium selenium-webdriver

我想获取启用了复选框的字符串列表。但是,当我使用isEnabled()时,即使对于禁用的复选框,它也始终返回true。在输出中,我获得了该字段中存在的所有字符串的列表。

下面是我为此编写的代码:-

@FindBy(css = "[class *= 'CheckboxTextAligned']")
    private List<WebElement> airportListCheckbox;

public void getEnabledValues() {
        for (WebElement elements : airportListCheckbox) {
            if(elements.isEnabled()==true) {
                for (WebElement airportText : airportListTextName) {
                    airportText.getText();
                    LOG.info(airportText.getText());                
                }
            }       
        }

HTML代码如下:- 对于禁用复选框:-

<label role="checkbox" aria-label="checkbox" class="inputs__CheckboxTextAligned undefined undefined">
<input type="checkbox" disabled checked>
<span class="inputs__box"><svg width="16px" height="16px" class="inputs__checkIcon" viewBox="0 0 1024 1024">
<path d="434z"></path></svg></span>
<span class="inputs__text">London City</span></label>

“已启用”复选框:-

<label role="checkbox" aria-label="checkbox" class="inputs__CheckboxTextAligned undefined undefined">
<input type="checkbox" checked="">
<span class="inputs__box"><svg width="16px" height="16px" class="inputs__checkIcon" viewBox="0 0 1024 1024">
<path d="133z"></path></svg></span>
<span class="inputs__text">London Gatwick</span></label>

1 个答案:

答案 0 :(得分:4)

在尝试验证输入节点已启用还是已禁用时,isEnabled()将检查元素上的Disabled属性。如果属性“ disabled”不存在,则返回True。

尝试以下代码:

@FindBy(xpath = "//label[contains(@class, 'CheckboxTextAligned')]/following::input")
private List<WebElement> airportListCheckbox;

public void getEnabledValues() {
for (WebElement elements : airportListCheckbox) {
    if(elements.isEnabled()) {
        for (WebElement airportText : airportListTextName) {
        airportText.getText();
        LOG.info(airportText.getText());                
        }
    }       
}

要检查输入节点是否已启用,您需要稍稍更改定位器,因为通常会尝试检查标签是否已启用/禁用(而不是输入节点),因此您将总是正确的。