配置默认 WebDriver Serenity Jbehave

Configure Default WebDriver Serenity Jbehave

实际上,我在尝试更改默认 webdriver 时遇到了困难。实际上我想 运行 我在 selenium 网格上的测试。然后我在扩展 PageObject 的 class 上添加以下代码:

    DesiredCapabilities cap = DesiredCapabilities.firefox();
    cap.setPlatform(Platform.WINDOWS);
    cap.setCapability("marionette",false);
    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile ffprofile = profile.
            getProfile("JbehaveProfile");
    cap.setCapability(FirefoxDriver.PROFILE, ffprofile);
    //cap.setVersion("46.0.1");
    URL url = new URL("http://localhost:4444/wd/hub");
    WebDriver driver = new RemoteWebDriver(url,cap);
    Serenity.getWebdriverManager().registerDriver(driver);
    Serenity.getWebdriverManager().setCurrentDriver(driver);

但它不起作用。它给出错误空指针异常。请有人给我建议如何在 Serenity 上设置硒网格?谢谢。

java.lang.NullPointerException
at testSeleniumGrid.pages.DictionaryPage.setProfileFirefox(DictionaryPage.java:70)
at testSeleniumGrid.steps.serenity.EndUserSteps.is_the_home_page(EndUserSteps.java:35)
at testSeleniumGrid.steps.serenity.EndUserSteps$$EnhancerByCGLIB$d97ef9c.CGLIB$is_the_home_page(<generated>)
at testSeleniumGrid.steps.serenity.EndUserSteps$$EnhancerByCGLIB$d97ef9c$$FastClassByCGLIB$eb4f32.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at net.thucydides.core.steps.StepInterceptor.invokeMethod(StepInterceptor.java:348)
at net.thucydides.core.steps.StepInterceptor.executeTestStepMethod(StepInterceptor.java:333)
at net.thucydides.core.steps.StepInterceptor.runTestStep(StepInterceptor.java:308)
at net.thucydides.core.steps.StepInterceptor.testStepResult(StepInterceptor.java:130)
at net.thucydides.core.steps.StepInterceptor.intercept(StepInterceptor.java:57)
at testSeleniumGrid.steps.serenity.EndUserSteps$$EnhancerByCGLIB$d97ef9c.is_the_home_page(<generated>)
at testSeleniumGrid.steps.DefinitionSteps.givenTheUserIsOnTheWikionaryHomePage(DefinitionSteps.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jbehave.core.steps.StepCreator$ParametrisedStep.perform(StepCreator.java:595)
at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:566)
at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:546)
at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:510)
at org.jbehave.core.embedder.StoryRunner.runStepsWithLifecycle(StoryRunner.java:476)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:336)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:239)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:182)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:266)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:233)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

如果您在本地模式下工作,即不使用网格,为了能够切换浏览器,您只需通过 JVM 参数 -Dwebdriver.driver=chrome 传递浏览器风格。 请确保您有相应的 driver 二进制文件 [IEDriverServer.exe(对于 Internet Explorer)、ChromeDriver.exe(对于 Chrome)和 Geckodriver.exe(对于较新版本的 Firefox如果使用 Selenium 3.0.1 )

如果您正在使用 Selenium Grid,其中 Grid 节点(不是 Grid Hub)在不同的机器上运行,即,假设您正在从 MachineA 开始您的 Serenity 测试并且您的 Grid 节点是 运行 在 MachineC 上,请确保您已将 IEDriverServer/ChromeDriver/GeckoDriver 二进制文件的位置添加到 MachineC 的 PATH 环境变量中(即,您的 Selenium 节点所在的机器 运行)。

关于设置二进制文件和使用它的更多说明。

为了能够使用 Serenity 并将其指向网格,您需要使用 JVM 参数 -Dwebdriver.remote.url=http://GridIp:GridPort/wd/hub

如果您正在寻找有关如何设置和使用 Selenium Grid 的一般说明,请参阅以下链接:

Serenity 的所有参数都可以在 ThucydidesSystemProperty.java 中找到。翻译逻辑似乎是将枚举更改为小写,将所有 - 替换为 .