Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:java.base/java.lang.String在通过selenium执行测试时不能转换为org.openqa.selenium.WebElement_Java_Selenium_Selenium Webdriver_Webdriver_Classcastexception - Fatal编程技术网

java.lang.ClassCastException:java.base/java.lang.String在通过selenium执行测试时不能转换为org.openqa.selenium.WebElement

java.lang.ClassCastException:java.base/java.lang.String在通过selenium执行测试时不能转换为org.openqa.selenium.WebElement,java,selenium,selenium-webdriver,webdriver,classcastexception,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"

我正在尝试在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() 根据文档,返回当前页面的来源,定义为:

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


包含() 该方法是一个Java方法,用于检查字符串是否包含另一个子字符串。它返回布尔值,因此可以直接在if语句中使用


分析 您使用的表达式:

driver.getPageSource().contains("Staffing");
将返回一个布尔值,但被强制转换为对象的
类型。此外,当您试图将
对象
类型的对象强制转换为
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执行其余任务。

driver.getPageSource()
返回字符串和
driver.getPageSource().contains(“人员配置”)
返回布尔值而不是WebElement,您无法将其强制转换为WebElement。您想在这里实现什么?我需要单击一个具有动态ID的WebElement,因此我将通过文本对象elem=driver.getPageSource().contains(“人员配置”)进行搜索,然后我将尝试获取它在网页上的位置,所以单击。@DebanjanB解释得很好,请检查它