【问题标题】:My Scripts in cucumber is not working with appium server?我在黄瓜中的脚本不适用于 appium 服务器?
【发布时间】:2020-08-05 20:24:48
【问题描述】:

我该如何解决这个错误

Failure in before hook:stepsDefinitions.setup()
Message: java.lang.NoSuchMethodError: org.openqa.selenium.remote.http.HttpClient$Factory.createDefault()Lorg/openqa/selenium/remote/http/HttpClient$Factory;
    at io.appium.java_client.remote.AppiumCommandExecutor.<init>(AppiumCommandExecutor.java:93)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:95)
    at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:94)
    at com.UK.BDD.cucumberFreamwork.steps.stepsDefinitions.setup(stepsDefinitions.java:58)
    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:498)
    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.JavaHookDefinition.execute(JavaHookDefinition.java:60)
    at cucumber.runtime.Runtime.runHookIfTagsMatch(Runtime.java:224)
    at cucumber.runtime.Runtime.runHooks(Runtime.java:212)
    at cucumber.runtime.Runtime.runBeforeHooks(Runtime.java:202)
    at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:40)
    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.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

【问题讨论】:

    标签: java cucumber appium


    【解决方案1】:

    下面的代码对我来说工作正常。如果您遇到任何问题,请尝试,如果仍然存在,请告诉我。

        public class Hooks {
    
    private static ThreadLocal<AppiumDriverLocalService> service = new ThreadLocal<>();
    private static ThreadLocal<AppiumDriver> driver = new ThreadLocal<>();
    public static AppiumDriver getDriver() {
        driver.get().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        return driver.get();
    }
    
    public AppiumDriverLocalService getService() {
        return service.get();
    }
    
    /**
     * Start Appium Server Programmatically before each scenario
     */
    
    // @Before, @After are called Global tagged hooks
    @Before
    public void startServer() {
        AppiumServiceBuilder appiumServiceBuilder = new AppiumServiceBuilder()
                .withAppiumJS(new File("/usr/local/lib/node_modules/appium/build/lib/main.js"))
                .withIPAddress("127.0.0.1");
        service.set(appiumServiceBuilder.build());
        service.get().start();
    
        if (service == null || !service.get().isRunning()) {
            throw new AppiumServerHasNotBeenStartedLocallyException("Nitin-: An Appium server node is not started!");
        }
    
        if (driver.get() == null) {
            setDriver();
        } else if (!new UsernamePage().checkForUsernamePage()) {
            //setDriver();
        }
    }
    
    public void setDriver() {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        if (System.getProperty("platform").equalsIgnoreCase("ios")) {
               capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
                 capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, (String) CapsJsonParser.getJSONObjectValue("ios").get("platformVersion"));
                 capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, (String) CapsJsonParser.getJSONObjectValue("ios").get("deviceName"));
                 capabilities.setCapability(MobileCapabilityType.UDID, (String) CapsJsonParser.getJSONObjectValue("ios").get("udid"));
                 capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, (String) CapsJsonParser.getJSONObjectValue("ios").get("automationName"));
                 capabilities.setCapability(IOSMobileCapabilityType.SHOW_XCODE_LOG, true);
                 capabilities.setCapability(IOSMobileCapabilityType.XCODE_SIGNING_ID, (String) CapsJsonParser.getJSONObjectValue("ios").get("xcodeSigningId"));
                 capabilities.setCapability(IOSMobileCapabilityType.XCODE_ORG_ID, (String) CapsJsonParser.getJSONObjectValue("ios").get("xcodeOrgId"));
                 capabilities.setCapability(IOSMobileCapabilityType.RESET_ON_SESSION_START_ONLY, (String) CapsJsonParser.getJSONObjectValue("ios").get("resetOnSessionStartOnly"));  
                 capabilities.setCapability(IOSMobileCapabilityType.USE_NEW_WDA, (String) CapsJsonParser.getJSONObjectValue("ios").get("resetOnSessionStartOnly"));  
                 capabilities.setCapability(IOSMobileCapabilityType.UPDATE_WDA_BUNDLEID, (String) CapsJsonParser.getJSONObjectValue("ios").get("updatedWDABundleId"));            
    
                 capabilities.setCapability(IOSMobileCapabilityType.BUNDLE_ID, (String) CapsJsonParser.getJSONObjectValue("ios").get("bundleId"));  
                 driver.set(new IOSDriver<IOSElement>(service.get().getUrl(), capabilities));
                 System.out.println("iOS device connected.");
    
        } 
    }
    

    【讨论】:

    • iam 使用 android,目标是将 TestNG 与 cucumber 集成,以便能够从参数文件中读取功能
    • @Menna 你用过我上面提到的代码吗?
    【解决方案2】:

    请确保您不使用任何 selenium 依赖项,因为 appium java-client 带有 selenium,然后使您的缓存无效/清除并重新启动您的 IDE

    这个依赖就够了。

    <dependency>
      <groupId>io.appium</groupId>
      <artifactId>java-client</artifactId>
      <version>versionYouNeed</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2016-08-03
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多