"It is impossible to create a new session because 'createSession' which takes HttpClient, InputStream and long" 而 运行 在 experitest 中测试

"It is impossible to create a new session because 'createSession' which takes HttpClient, InputStream and long" while running test in experitest

我正在尝试通过在 eclipse 中安装 appium studio 插件 运行 在云平台 android 移动设备中 cloud.seetest.io 我的测试,这样测试就可以 运行直接来自 eclipse IDE 本身。

总是报错

org.openqa.selenium.WebDriverException: It is impossible to create a new session because 'createSession' which takes HttpClient, InputStream and long was not found or it is not accessible

@BeforeMethod
    @Parameters("deviceQuery")
    public void setUp(@Optional("@os='android'") String deviceQuery)throws Exception{

    init(deviceQuery);
        // Init application / device capabilities
    dc.setCapability(MobileCapabilityType.APP, "cloud:xxxxxxxx/.xxxx");
    dc.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "xxxxx");
    dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".xxxxxx");
    dc.setCapability(SeeTestCapabilityType.DEVICE_QUERY, deviceQuery);
    dc.setCapability(SeeTestCapabilityType.TEST_NAME, "AndroidDemoTest");
    dc.setCapability("appVersion", "1.0.10516");
    dc.setCapability("testName", "AndroidDemoTest");
    driver = new AndroidDriver<>(new URL(getProperty("url",cloudProperties) + "/wd/hub"), dc);

    }

很可能是你的 Appium client library version is not supported, as per Set Appium Java Client 章节:

You could make use of the Appium Java Client by adding a dependency to your Maven and Gradle projects

Please make sure you replace with the appropriate version:

  • 4.1.2
  • 5.0.4
  • 6.1.0
  • 7.0.0

It is recommended to use the public maven repo before the code export.

因此请检查您的依赖项管理文件并确保将 io.appium.java-client 依赖项更新为受支持的版本之一。

Experitest 的客户端库可能丢失了。尝试在 build.gradle 中添加 compile 'com.experitest:repo:+'。这将下载最新的客户端库。 This 文档可能会帮助您使用 Appium Studio 插件创建示例项目

解决方案 1

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "xyz");
capabilities.setCapability("platformVersion", "6.0");
capabilities.setCapability("platformName", Platform.ANDROID);
capabilities.setCapability("appPackage", "com.hp.HPSupportAssistant");
capabilities.setCapability("appActivity", "com.hp.HPSupportAssistant.MainActivity");
 capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 6000);    capabilities.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS,true);
//desiredCap.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);

在行下方评论然后运行它会起作用 desiredCap.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);

解法二 或者保持所需能力的线以上,但在此之前做 运行 3 cmd on cmd promt

adb shell pm list packages -f > D://t.txt
adb uninstall io.appium.uiautomator2.server
adb uninstall io.appium.uiautomator2.server.test

desiredCap.setCapability(MobileCapabilityType.AUTOMATION_NAME,AutomationName.ANDROID_UIAUTOMATOR2);

当驱动程序无法启动时会出现此问题。在连接到 experitest 时,这些可能是导致此错误的问题:

  1. 专家执照。如果许可证一次用于一个 device/session,则不能尝试创建另一个会话。

  2. 所需的能力。确保具有您在代码中提到的设备 ID 的设备在 seetest 云中可用。最佳做法是先屏蔽设备,然后将 UDID 复制到代码中。

事实上,有很多原因可能导致没有创建驱动程序。这个错误背后的实际原因在堆栈跟踪中提到了。向下查看堆栈跟踪,您会找到真正的原因。

我的情况是第二次发生。