java.lang.ClassCastException:通过Selenium执行测试时,无法将java.base / java.lang.String强制转换为org.openqa.selenium.WebElement

时间:2018-08-22 18:12:06

标签: java selenium selenium-webdriver webdriver classcastexception

我正在尝试在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");
        }
    }

这是怎么回事,我该如何解决?

1 个答案:

答案 0 :(得分:2)

getPageSource()

根据文档getPageSource()返回当前页面的,并定义为:

  

获取上次加载页面的来源。如果在加载后修改了页面(例如,通过Javascript),则不能保证返回的文本是修改后的页面的文本。您需要遵循用于确定返回的文本是反映页面的当前状态还是Web服务器最后发送的文本的特定驱动程序的文档。返回的页面源是底层DOM的表示形式:不要期望它以与从Web服务器发送的响应相同的方式进行格式化或转义。


contains()

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 轻松执行其余任务。