我想获取启用了复选框的字符串列表。但是,当我使用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>
答案 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());
}
}
}
要检查输入节点是否已启用,您需要稍稍更改定位器,因为通常会尝试检查标签是否已启用/禁用(而不是输入节点),因此您将总是正确的。