使Selenium找到复选框,禁用=“已禁用”

时间:2016-06-21 15:58:40

标签: selenium xpath checkbox selenium-webdriver webdriver

我正在尝试使用以下内容获取disabled="disabled"属性的复选框:

 List<WebElement> checkBox= driver.findElements(By.xpath("xpath")); 

其中“xPath”是以下之一:

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::input

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::*[@type='checkbox']

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::*[@disabled='disabled']
在FirePath和控制台中选中

以上工作的所有。示例证明:

enter image description here

但是,当我在代码中运行xPath时,它会失败:

org.openqa.selenium.TimeoutException: Timed out after 15 seconds waiting for ...

如果我搜索“普通”复选框(没有禁用属性并在同一页面上),代码可以正常工作。所以我很确定这是disabled="disabled"属性的责任。

简化HTML:

<div class="wfm-statusbar">
  <div>
    <span>  some text</span>
    <span>
    <label>
           <input type="checkbox"  disabled="disabled" >
    </label>
</span>
  </div>
</div>

有什么建议吗? 感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用CSS选择器,但如果您的XPath没有,我不希望它会起作用。正如SiKing所说,Selenium不会与禁用或不可见元素相互作用。

System.out.println(driver.findElements(By.cssSelector("div.wfm-statusbar input[disabled='disabled']")).isEmpty());

如果没有找到任何元素,这将返回true

您可能必须使用JS访问这些元素。您可以在此处找到与此相关的问题:How to use JavaScript with Selenium WebDriver Java

您将需要使用相同的CSS选择器,但使用JS,如下所示。

document.querySelectorAll("div.wfm-statusbar input[disabled='disabled']");

这将返回您可以使用的元素集合。

以下是一个类似于您希望用于JavascriptExecutor的内容的简单示例。

WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.com");
JavascriptExecutor jse = (JavascriptExecutor) driver;
List<WebElement> linksJs = (List<WebElement>) jse.executeScript("return document.querySelectorAll('a')");
System.out.println(linksJs.size());

答案 1 :(得分:0)

这应该有效,只有当它是一个复选框并被禁用时才会获得复选框。

<marker>