繁体   English   中英

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

[英]java.lang.ClassCastException: java.base/java.lang.String cannot be cast to org.openqa.selenium.WebElement when executing test through Selenium

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

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

getPageSource()

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

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


包括()

contains()方法是一种Java方法,用于检查String是否包含另一个子字符串 它返回布尔值,因此可以直接在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 ,则必须使用以下两种方法之一:

现在,如果您希望获得文本为StaffingWebElement (无需任何对相关HTML的引用),则可以使用以下解决方案:

WebElement element = driver.findElement(By.xpath("//*[contains(text(),'Staffing')]"));

现在,一旦你所在的WebElement,你可以很容易地与WebElement执行你的任务剩余。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM