我正在尝试使用以下内容获取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和控制台中选中以上工作的所有。示例证明:
但是,当我在代码中运行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>
有什么建议吗? 感谢。
答案 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>