serenity-bdd / serenity-core

Serenity BDD is a test automation library designed to make writing automated acceptance tests easier, and more fun.
http://serenity-bdd.info
Other
718 stars 515 forks source link

Dserenity.driver.capabilities does not work for saucelabs devices - Verification issue 842 failure #856

Closed ibmer921150 closed 7 years ago

ibmer921150 commented 7 years ago

Hi there,

I updated the latest version 1.5.3 and verify the issue https://github.com/serenity-bdd/serenity-core/issues/842 with following commands. Got the error message, could you please take a look at? Thanks.

Note that if appium version is 1.5.3, browserName is browser; if appium version is 1.6.5, browserName is chrome which is defined in saucelabs.

mvn verify -Dwebdriver.driver=remote -Dserenity.driver.capabilities="appiumVersion:1.5.3; deviceName:Android Emulator; deviceOrientation:portrait; browserName:Browser; platformVersion:5.1; platformName:Android; acceptSslCert:true" -Dsaucelabs.url=http://xxx@ondemand.saucelabs.com:80/wd/hub -Dsaucelabs.access.key=xxx -Dsaucelabs.user.id=xxx -Dmaven.test.failure.ignore=false

or

mvn verify -Dwebdriver.driver=remote -Dserenity.driver.capabilities="appiumVersion:1.6.5; deviceName:Android Emulator; deviceOrientation:portrait; browserName:Chrome; platformVersion:6.0; platformName:Android; acceptSslCert:true" -Dsaucelabs.url=xxx@ondemand.saucelabs.com:80/wd/hub -Dsaucelabs.access.key=xxx -Dsaucelabs.user.id=xxx -Dmaven.test.failure.ignore=false

Then got the error message

net.thucydides.core.webdriver.UnsupportedDriverException: Could not instantiate class org.openqa.selenium.remote.RemoteWebDriver at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:151) at net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:138) at net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:108) at net.thucydides.core.webdriver.WebDriverFacade.openIgnoringHtmlUnitScriptErrors(WebDriverFacade.java:183) at net.thucydides.core.webdriver.WebDriverFacade.get(WebDriverFacade.java:178) at net.serenitybdd.core.pages.PageObject.openPageAtUrl(PageObject.java:827) at net.serenitybdd.core.pages.PageObject.open(PageObject.java:737) at net.serenitybdd.core.pages.PageObject.open(PageObject.java:725) at xxx.commonsteps.CommonSteps.navigates_tepapa_about_page(CommonSteps.java:61) at xxxx.commonsteps.CommonSteps$$EnhancerByCGLIB$$5e1fe0fe.CGLIB$navigates_tepapa_about_page$31() at xxxx.CommonSteps$$EnhancerByCGLIB$$5e1fe0fe$$FastClassByCGLIB$$e7de4847.invoke() at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) at net.thucydides.core.steps.StepInterceptor.invokeMethod(StepInterceptor.java:395) at net.thucydides.core.steps.StepInterceptor.executeTestStepMethod(StepInterceptor.java:380) at net.thucydides.core.steps.StepInterceptor.runTestStep(StepInterceptor.java:355) at net.thucydides.core.steps.StepInterceptor.testStepResult(StepInterceptor.java:132) at net.thucydides.core.steps.StepInterceptor.intercept(StepInterceptor.java:61) at xxxx.CommonSteps$$EnhancerByCGLIB$$5e1fe0fe.navigates_xxx_about_page() at xxxx.xxxxtestCase.user_navigate_on_about_page(xxxxxTestCase.java:45) at ✽.Given user navigate on about page(src/test/resources/features/tepapa_discover/tepapa_discover_m1_font.feature:10) Caused by: net.thucydides.core.webdriver.UnsupportedDriverException: Could not instantiate new WebDriver instance of type class org.openqa.selenium.remote.RemoteWebDriver (null at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:135) at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:147) at net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:138) at net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:108) at net.thucydides.core.webdriver.WebDriverFacade.openIgnoringHtmlUnitScriptErrors(WebDriverFacade.java:183) at net.thucydides.core.webdriver.WebDriverFacade.get(WebDriverFacade.java:178) at net.serenitybdd.core.pages.PageObject.openPageAtUrl(PageObject.java:827) at net.serenitybdd.core.pages.PageObject.open(PageObject.java:737) at net.serenitybdd.core.pages.PageObject.open(PageObject.java:725) at xxx.CommonSteps.navigates_tepapa_about_page(CommonSteps.java:61) at xxx.CommonSteps$$EnhancerByCGLIB$$5e1fe0fe.CGLIB$navigates_tepapa_about_page$31() at xxx.CommonSteps$$EnhancerByCGLIB$$5e1fe0fe$$FastClassByCGLIB$$e7de4847.invoke() at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) at net.thucydides.core.steps.StepInterceptor.invokeMethod(StepInterceptor.java:395) at net.thucydides.core.steps.StepInterceptor.executeTestStepMethod(StepInterceptor.java:380) at net.thucydides.core.steps.StepInterceptor.runTestStep(StepInterceptor.java:355) at net.thucydides.core.steps.StepInterceptor.testStepResult(StepInterceptor.java:132) at net.thucydides.core.steps.StepInterceptor.intercept(StepInterceptor.java:61) at xxx.CommonSteps$$EnhancerByCGLIB$$5e1fe0fe.navigates_tepapa_about_page() at xxx.TepapaDiscoverM1FontTestCase.user_navigate_on_about_page(TepapaDiscoverM1FontTestCase.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at cucumber.runtime.Utils$1.call(Utils.java:40) at cucumber.runtime.Timeout.timeout(Timeout.java:16) at cucumber.runtime.Utils.invoke(Utils.java:34) at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38) at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37) at cucumber.runtime.Runtime.runStep(Runtime.java:300) at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44) at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39) at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44) at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102) at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63) at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70) at cucumber.api.junit.Cucumber.runChild(Cucumber.java:95) at cucumber.api.junit.Cucumber.runChild(Cucumber.java:38) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.api.junit.Cucumber.run(Cucumber.java:100) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:272) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:236) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:386) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:323) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:143) Caused by: java.lang.NullPointerException at net.thucydides.core.webdriver.capabilities.SetAppropriateSaucelabsPlatformVersion.from(SetAppropriateSaucelabsPlatformVersion.java:49) at net.thucydides.core.webdriver.capabilities.SaucelabsRemoteDriverCapabilities.configureTargetPlatform(SaucelabsRemoteDriverCapabilities.java:77) at net.thucydides.core.webdriver.capabilities.SaucelabsRemoteDriverCapabilities.getCapabilities(SaucelabsRemoteDriverCapabilities.java:43) at net.serenitybdd.core.webdriver.driverproviders.SaucelabsDriverBuilder.findSaucelabsCapabilities(SaucelabsDriverBuilder.java:48) at net.serenitybdd.core.webdriver.driverproviders.SaucelabsDriverBuilder.buildWithOptions(SaucelabsDriverBuilder.java:33) at net.serenitybdd.core.webdriver.driverproviders.RemoteDriverProvider.newInstance(RemoteDriverProvider.java:44) at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:125) ... 58 more

cliviu commented 7 years ago

Hi @ibmer921150 . You need to set a value for the property "saucelabs.target.platform"

ibmer921150 commented 7 years ago

@cliviu Thanks for your reply. What's the "saucelabs.target.platform" should be set for saucelabs devices?

It is not required previously unless the code has been changed for it since platformVersion and platformName have been defined in -Dserenity.driver.capabilities.

cliviu commented 7 years ago

hmm, something like "Windows 10", ""Windows 8.1"" . see here : https://wiki.saucelabs.com/display/DOCS/2017/06/16/Sauce+Labs+platform+changes+to+support+newer+browsers is about the "platform" capability of the driver. For the moment just try to set a non empty value to see if you get rid of the NPE

ibmer921150 commented 7 years ago

@cliviu Thanks for the information. I will have a try to set a target platform and verify if NPE can be removed.

But it doesn't make sense to set the target platform as it is for desktop, rather then devices. For devices, it is platformVersion and platformName. I have tried sauce labs devices configuration within selenium as following. And I don't set special target platform. It works correctly.

DesiredCapabilities caps = DesiredCapabilities.android(); caps.setCapability("appiumVersion", "1.6.5"); caps.setCapability("deviceName","Android Emulator"); caps.setCapability("deviceOrientation", "portrait"); caps.setCapability("browserName", "Chrome"); caps.setCapability("platformVersion", "6.0"); caps.setCapability("platformName","Android");

It would be good that serenity can support to defined capabilities in -Dserenity.driver.capabilities

cliviu commented 7 years ago

It may be a bug in serenity. Let me know please if it works after you set any platform in saucelabs.target.platform

ibmer921150 commented 7 years ago

Hi @cliviu,

Verified that NPE will be not reproduced if setting the target platform. Confirmed that this is serenity bug. The target platform is required for saucelabs devices. It should be set a default value if target platform is not set by user.

Thanks.

cliviu commented 7 years ago

Hi @ibmer921150 . Thanks for your feedback !

ibmer921150 commented 7 years ago

Hi @cliviu , thanks for the confirmation. I'm working on the bug and will propose a pull request. May bug you later for more questions. Cheers

cliviu commented 7 years ago

The bug fix was planned in our team :) but your contribution is welcome

wakaleo commented 7 years ago

Fixed in 1.5.4