Mik*_*ASP 51 java selenium-webdriver junit5
来源:JUnit 5、Eclipse 4.8、Selenium
我可以在没有任何特殊测试框架的情况下编写和执行 Selenium 脚本,但我想使用 Junit 5(因为我们依赖其他工具)并且我从未见过这样的错误“org.junit.jupiter.api.extension.ParameterResolutionException”而与 Junit 4 一起工作。目前它是 Junit 5,我用谷歌搜索它以获得某种想法,但无法解决问题。
测试脚本:
package login;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class loginTest {
public WebDriver driver = null ;
public loginTest(WebDriver driver)
{
this.driver=driver;
}
@BeforeEach
public void setUp() throws Exception
{
driver.get("google.com");
System.out.println("Page title is: " + driver.getTitle());
}
@Test
public void test() {
// some action here I have in original script
System.out.println("Page title is: " + driver.getTitle());
}
@AfterEach
public void tearDown() throws Exception
{
driver.quit();
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [org.openqa.selenium.WebDriver arg0] in executable [public login.loginTest(org.openqa.selenium.WebDriver)].
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:191)
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:174)
at org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:135)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:61)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:208)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateAndPostProcessTestInstance(ClassTestDescriptor.java:195)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstanceProvider$0(ClassTestDescriptor.java:185)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstanceProvider$1(ClassTestDescriptor.java:189)
at java.util.Optional.orElseGet(Unknown Source)
at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$testInstanceProvider$2(ClassTestDescriptor.java:188)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:81)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:58)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.prepare(HierarchicalTestExecutor.java:89)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:74)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.forEach(Unknown Source)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.forEach(Unknown Source)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)
at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:55)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Run Code Online (Sandbox Code Playgroud)
Wil*_*ill 102
我有@Test
和@ParameterizedTest
注释相同的方法。我删除了前者。
Val*_*ler 16
这可能不是上面问题的答案,但对我来说使用Spring-Boot和Lombok的 @RequiredArgsConstructor 来说,JUnit 无法自动装配依赖项。我的班级看起来像这样:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { TestPersistenceConfiguration.class, MyRepositoryTest.TestConfiguration.class })
@RequiredArgsConstructor
class MyRepositoryTest {
private final MyRepository repository;
private final TransactionTemplate tt;
// test methods...
@Configuration
@EnableJpaRepositories(basePackageClasses = { MyRepository.class })
static class TestConfiguration {}
}
Run Code Online (Sandbox Code Playgroud)
龙目岛 onX是实验性的,有不同的风格。
您可以添加onConstructor = @__(@Autowired)
到RequiredArgsConstructor注释:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { TestPersistenceConfiguration.class, MyRepositoryTest.TestConfiguration.class })
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
class MyRepositoryTest {
// everything as before
}
Run Code Online (Sandbox Code Playgroud)
恕我直言,拥有一个带有 @Autowired 的 IDE 生成构造函数会更好。最起码到现在。
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { TestPersistenceConfiguration.class, MyRepositoryTest.TestConfiguration.class })
class MyRepositoryTest {
private final MyRepository repository;
private final TransactionTemplate tt;
@Autowired
MyRepositoryTest(MyRepository repository, TransactionTemplate tt) {
this.tt = tt;
this.repository = repository;
}
// everything else as before
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*nen 12
正如 Marc Philipp 在他的评论中提到的,您需要确保 JUnit Jupiter 可以实例化您的测试类。
对于您的特定场景,您需要删除接受WebDriver
.
那么你有两个选择:
WebDriver
自行创建- 例如,在@BeforeAll
or@BeforeEach
方法中。WebDriver
您管理。Mat*_*eds 11
我也得到ParameterResolutionException
了 JUnit 5。
org.junit.jupiter.api.extension.ParameterResolutionException:
No ParameterResolver registered for parameter [int[] arg0] in constructor (public my_package.MyClass(int[]))
Run Code Online (Sandbox Code Playgroud)
我在@Test
我正在测试的类中编写了方法。
可以通过两种方式修复此错误:
1) 替换import org.junit.jupiter.api.Test
为import org.junit.Test
, 或
2) 在单独的 TestClass 中编写测试。
对我来说,我正在使用
@ParameterizedTest
@CsvSource({
"1st-param1","1st-param2",
"2nd-param1","2nd-param2"
})
public void isCompleted(String param1, String param2) {
Run Code Online (Sandbox Code Playgroud)
而不是(引用错误):
@ParameterizedTest
@CsvSource({
"1st-param1,1st-param2",
"2nd-param1,2nd-param2"
})
public void isCompleted(String param1, String param2) {
Run Code Online (Sandbox Code Playgroud)
我收到此错误是因为我的测试需要先运行 Spring Boot 服务器,以便执行使用 @Autowired 的依赖注入。我添加了这些注释:
@Transactional
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Server.class)
public MyTestClass () {
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
68152 次 |
最近记录: |