Java org.openqa.selenium.WebDriverException:返回值无法转换为WebElement
我想为一个网站编写selenium测试。但我还不能让它工作 这是一个至少不起作用的例子。我创建了一个公共docker实例。你能再现错误吗?执行此代码时是否会发生相同的情况Java org.openqa.selenium.WebDriverException:返回值无法转换为WebElement,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我想为一个网站编写selenium测试。但我还不能让它工作 这是一个至少不起作用的例子。我创建了一个公共docker实例。你能再现错误吗?执行此代码时是否会发生相同的情况 package Selenium; import java.net.URL; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.remo
package Selenium;
import java.net.URL;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
public class stackoverflow {
@Test
public void testSimple() throws Exception {
DesiredCapabilities desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setBrowserName("firefox");
desiredCapabilities.setVersion("83.0");
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://stackoverflow.martin-mandelkow.de:4444/wd/hub"), desiredCapabilities);
driver.get("https://stackoverflow.com/questions/65555131/org-openqa-selenium-webdriverexception-returned-value-cannot-be-converted-to-we");
By containerBy = By.id("notify-container");
WebElement element = driver.findElement(containerBy);
System.out.println(element.toString());
driver.quit();
}
}
控制台日志:
cd C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1; "JAVA_HOME=C:\\Program Files\\Java\\jdk-15.0.1" cmd /c "\"C:\\Program Files\\NetBeans-12.2\\netbeans\\java\\maven\\bin\\mvn.cmd\" -Dtest=Selenium.stackoverflow -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans-12.2\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 test-compile surefire:test"
Scanning for projects...
--------------------< com.mycompany:mavenproject1 >---------------------
Building mavenproject1 1.0-SNAPSHOT
--------------------------------[ jar ]---------------------------------
--- maven-resources-plugin:2.6:resources (default-resources) @ mavenproject1 ---
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\src\main\resources
--- maven-compiler-plugin:3.1:compile (default-compile) @ mavenproject1 ---
Nothing to compile - all classes are up to date
--- maven-resources-plugin:2.6:testResources (default-testResources) @ mavenproject1 ---
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\src\test\resources
--- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mavenproject1 ---
Changes detected - recompiling the module!
Compiling 6 source files to C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\target\test-classes
--- maven-surefire-plugin:2.12.4:test (default-cli) @ mavenproject1 ---
Surefire report directory: C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running Selenium.stackoverflow
element = driver.findElement
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 6.705 sec <<< FAILURE!
testSimple(Selenium.stackoverflow) Time elapsed: 6.552 sec <<< ERROR!
org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {element-6066-11e4-a52e-4f735466cecf=18ace72e-f260-4c78-a78b-b34a8f3cf8d4}
Build info: version: '2.45.0', revision: '5017cb8e7ca8e37638dc3091b2440b90a1d8686f', time: '2015-02-27 09:10:26'
System info: host: 'DESKTOP-NSVVQ0T', ip: '172.20.176.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '15.0.1'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:359)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)
at org.openqa.selenium.By$ById.findElement(By.java:214)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)
at Selenium.stackoverflow.testSimple(stackoverflow.java:28)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: java.lang.ClassCastException: class com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to class org.openqa.selenium.WebElement (com.google.common.collect.Maps$TransformedEntriesMap and org.openqa.selenium.WebElement are in unnamed module of loader 'app')
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:357)
... 36 more
Results :
Tests in error:
testSimple(Selenium.stackoverflow): Returned value cannot be converted to WebElement: {element-6066-11e4-a52e-4f735466cecf=18ace72e-f260-4c78-a78b-b34a8f3cf8d4}(..)
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 15.319 s
Finished at: 2021-01-06T20:28:51+01:00
------------------------------------------------------------------------
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-cli) on project mavenproject1: There are test failures.
Please refer to C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\target\surefire-reports for the individual test results.
-> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
cd C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1;“JAVA\u HOME=C:\\Program Files\\JAVA\\jdk-15.0.1”cmd/C“\”C:\\Program Files\\NetBeans-12.2\\NetBeans\\JAVA\\maven\\bin\\mvn.cmd\”-Dtest=Selenium.stackoverflow-Dmaven.ext.class.path=\“C:\\Program Files\\NetBeans-12.2\\NetBeans\\JAVA\\maven nblib\\NetBeans eventspy.jar\”-Dfile.encoding=UTF-8测试编译surefire:test”
正在扫描项目。。。
-----------------------------------------
构建mavenproject1 1.0-SNAPSHOT
--------------------------------[罐子]---------------------------------
---maven资源插件:2.6:resources(默认资源)@mavenproject1---
使用“UTF-8”编码复制筛选的资源。
跳过不存在的资源目录C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\src\main\resources
---maven编译器插件:3.1:compile(默认编译)@mavenproject1---
无需编译-所有类都是最新的
---maven资源插件:2.6:testResources(默认testResources)@mavenproject1---
使用“UTF-8”编码复制筛选的资源。
跳过不存在的资源目录C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\src\test\resources
---maven编译器插件:3.1:testCompile(默认testCompile)@mavenproject1---
检测到更改-重新编译模块!
正在将6个源文件编译为C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\target\test类
---maven surefire插件:2.12.4:test(默认cli)@mavenproject1---
Surefire报告目录:C:\Users\Mandelkow\Documents\NetBeansProjects\mavenproject1\target\Surefire报告
-------------------------------------------------------
T T S T S
-------------------------------------------------------
正在运行Selenium.stackoverflow
元素=driver.findElement
测试运行:1,失败:0,错误:1,跳过:0,所用时间:6.705秒
您能否共享html页面或至少应该匹配的元素及其父元素?它何时失败?堆栈跟踪何时创建?另外,您试图实现现有ExpectedConditions没有提供的功能是什么?@DMart我从一个简单的WebElement元素=driver.findElement(By.id(“login\u input\u user\u name”)代码>向我提供错误返回值无法转换为WebElement
。从那里,我复制了多个教程中粘贴的代码,希望能得到一个简单的登录函数。@rmunge我在问题中添加了整个页面的html。看起来您的元素有问题。请尝试任何其他元素,而不是用户名,如By usernameBy=By.id(“用户对话\联系\表单\ div”),并查看它是否仍在出现。您能否共享html页面或至少应匹配的元素及其父元素?何时失败?堆栈跟踪何时创建?另外,您试图实现现有ExpectedConditions没有提供的功能是什么?@DMart我从一个简单的WebElement元素=driver.findElement(By.id(“login\u input\u user\u name”)代码>向我提供错误返回值无法转换为WebElement
。从那里,我复制了多个教程中粘贴的代码,希望能得到一个简单的登录函数。@rmunge我在问题中添加了整个页面的html。看起来您的元素有问题。尝试任何其他元素,而不是用户名,比如By usernameBy=By.id(“user\u dialog\u contact\u form\u div”),看看它是否仍然存在。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.45.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-remote-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>2.45.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>