我正在尝试在Selenium WebDriver中进行自动化测试,但是Eclipse向我显示了以下错误:
java.lang.ClassCastException: java.base/java.lang.String cannot be cast to org.openqa.selenium.WebElement
这是我的代码:
public void SeachApp()
{
Object elem = driver.getPageSource().contains("Staffing");
if (elem != null)
{
System.out.println("Encontrado");
int width = ((WebElement) elem).getSize().getWidth();
Actions act = new Actions(driver);
act.moveToElement((WebElement) elem)
.moveByOffset((width / 2) - 15, 0)
.click()
.perform();
}
else
{
System.out.println("Não Encontrado");
}
}
这是怎么回事,我该如何解决?
答案 0 :(得分:2)
根据文档getPageSource()
返回当前页面的源,并定义为:
获取上次加载页面的来源。如果在加载后修改了页面(例如,通过Javascript),则不能保证返回的文本是修改后的页面的文本。您需要遵循用于确定返回的文本是反映页面的当前状态还是Web服务器最后发送的文本的特定驱动程序的文档。返回的页面源是底层DOM的表示形式:不要期望它以与从Web服务器发送的响应相同的方式进行格式化或转义。
contains()
方法是一种 Java 方法,用于检查 String 是否包含另一个 substring 。它返回布尔值,因此可以直接在if语句内部使用。
您使用的表达式:
driver.getPageSource().contains("Staffing");
将返回布尔值,但将其转换为Object
类型的对象。此外,当您尝试将Object
类型的对象转换为WebElement
类型时,会看到以下错误:
java.lang.ClassCastException: java.base/java.lang.String cannot be cast to org.openqa.selenium.WebElement
如果要查找 WebElement ,则必须使用以下两种方法之一:
现在,如果您希望使用文本 Staffing (没有引用相关的 HTML )来获取 WebElement 使用以下解决方案:
WebElement element = driver.findElement(By.xpath("//*[contains(text(),'Staffing')]"));
现在,一旦找到 WebElement ,您就可以使用 WebElement 轻松执行其余任务。