我正在尝试使用页面对象模型在硒Web驱动程序中自动执行单选按钮。 以下是我的代码解释:
By AutomaticDataLockTimed = By.xpath("//span[@class='ant-radio']//input[@name='automaticDataLock']");
if (!((WebElement) AutomaticDataLockTimed).isSelected()) {
JSUtil.clickElementUsingBySelector(AutomaticDataLockTimed, driver);
}
}
我收到以下错误消息
java.lang.ClassCastException: class org.openqa.selenium.By$ByXPath 不能 cast to class org.openqa.selenium.WebElement (org.openqa.selenium.By$ByXPath 和 org.openqa.selenium.WebElement 位于加载器'app'的未命名模块中(
我已经引用了这个链接java.lang.ClassCastException:org.openqa.selenium.By$ById 不能强制转换为org.openqa.selenium.WebElement
但是这个链接没有回答我的情况。
我认为这是由于我的 if 语句中的铸造问题,但我无法修复。
请帮忙!
您正在尝试在AutomaticDataLockTimed
上调用.isSelected()
,这是一个By
对象,但isSelected()
是WebElement
上的一个方法 - 这就是您的异常的来源。
我看到您正在尝试将By
投给WebElement
,但这不是解决问题的正确方法。您需要使用WebDriver
实例找到具有AutomaticDataLockTimed
的元素,然后才能调用isSelected()
:
编辑:此答案已更新为使用getAttribute("value")
而不是用户指定的isSelected()
。我将答案描述保留原样以匹配原始问题描述。
By AutomaticDataLockTimed = By.xpath("//span[@class='ant-radio']//input[@name='automaticDataLock']");
// locate the element using AutomaticDataLockTimed locator
WebElement element = webdriver.findElement(AutomaticDataLockTimed);
if (!element.getAttribute("value").equals("true"))
{
JSUtil.clickElementUsingBySelector(AutomaticDataLockTimed, driver);
}
请记住,您应该在脚本的开头开始WebDriver
如下:
WebDriver webdriver = new ChromeDriver();
希望这有所帮助。
这对我有用。
List<WebElement> list = driver.findElements(WEBELEMENT);
for (int i = 0; i < list.size(); i++) {
String str = list.get(i).getAttribute("value");
if (str.equals("true")) {
list.get(i).click();
}