Reputation: 143
I am trying to automate radio button in selenium web driver using Page object model. Below is my code explanation:
By AutomaticDataLockTimed = By.xpath("//span[@class='ant-radio']//input[@name='automaticDataLock']");
if (!((WebElement) AutomaticDataLockTimed).isSelected()) {
JSUtil.clickElementUsingBySelector(AutomaticDataLockTimed, driver);
}
}
and I am getting below error message
java.lang.ClassCastException: class org.openqa.selenium.By$ByXPath cannot be cast to class org.openqa.selenium.WebElement (org.openqa.selenium.By$ByXPath and org.openqa.selenium.WebElement are in unnamed module of loader 'app')
I have referred this link java.lang.ClassCastException: org.openqa.selenium.By$ById cannot be cast to org.openqa.selenium.WebElement
but this link did not answer my scenario.
I think it is due to casting problem in my if statement but I cannot fix.
Please help!
Upvotes: 1
Views: 16589
Reputation: 143
This worked for me.
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();
}
Upvotes: 0
Reputation: 5909
You are trying to call .isSelected()
on AutomaticDataLockTimed
, which is a By
object, but isSelected()
is a method on a WebElement
-- that's where your exception is coming from.
I see that you are trying to cast By
to WebElement
, but that's not the right way to solve the issue. You need to use your WebDriver
instance to locate an element with AutomaticDataLockTimed
before you can call isSelected()
:
EDIT: This answer has been updated to use getAttribute("value")
instead of isSelected()
, as specified by the user. I am leaving answer description as-is to match original problem description.
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);
}
Remember, you should have started WebDriver
at the beginning of your script as such:
WebDriver webdriver = new ChromeDriver();
Hope this helps a bit.
Upvotes: 3