java - 带有 Appium 的 iOS Web 测试

标签 java ios selenium appium selenium-grid

  • 我使用的是真实设备
  • 我正在尝试基于网络的测试
  • 我有一个完整的适用于 Android 的 TestNG 套件

我不知道如何在 iOS 上执行相同的测试。

我得到的错误是:

org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Command failed: /bin/sh -c ideviceinstaller -u A7BD67F34FA1B94651C832041B4DEE720DC2CBC1 -i /var/folders/0x/z8gpmw7923d8gw9k14rdj0gh3qx1yt/T/115105-3319-10zvjv1/SafariLauncher.app
No iOS device found, is it plugged in?)

我使用 appium --nodeconfig/path/to/config.json -p 4623 --safari 和 JSON 配置启动我的 selenium 网格节点:

{
"capabilities":
[
{
"browserName":"Safari",
"deviceName": "iPod 5",
"udid":"A7BD67F34FA1B94651C832041B4DEE720DC2CBC1",
"version":"8.4.1",
"maxInstances": 5,
"platform":"MAC",
"platformName": "iOS"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":10000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
"url":"http://0.0.0.0:4623/wd/hub",
"maxSession": 5,
"port": 4623,
"host": "0.0.0.0",
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}

我创建 IOSDriver 的 java 是:

public static IOSDriver getIOSDriver(String udid) throws MalformedURLException{

        String SELENIUM_HUB_URL = "http://localhost:4444/wd/hub";
        ThreadLocal<IOSDriver> driver = null;  

        DesiredCapabilities capabilities = new DesiredCapabilities();   
        capabilities.setCapability("deviceName", "iPod 5");
        capabilities.setCapability("udid", udid);
        capabilities.setPlatform(Platform.MAC);
        capabilities.setCapability("verison", "8.4.1");
        capabilities.setCapability("platfromName", "iOS");
        capabilities.setCapability("browserName", "Safari");

        try {
            driver = new ThreadLocal<IOSDriver>();
            driver.set(new IOSDriver(new URL(SELENIUM_HUB_URL),
                    capabilities));
        } catch (MalformedURLException e) {
            System.out.println("Tackle Issue with RemoteDriverSetup");
        }
        driver.get().manage().timeouts()
                .pageLoadTimeout(20L, TimeUnit.SECONDS);
        driver.get().manage().timeouts()
                .implicitlyWait(20L, TimeUnit.SECONDS);

        return driver.get();
    }

需要说明的是,设备插入并且 safariLauncher 已从 xCode 部署,它能够找到该设备。

我是否遗漏了一些基本的东西?

谢谢你的帮助,

利亚姆

最佳答案

所以我找到了解决这个问题的方法。 iTunes 为设备提供的设备 UDID 为 A7BD67F34FA1B94651C832041B4DEE720DC2CBC1:

iTunes UDID

但 xCode UDID 是 a7bd67f34fa1b94651c832041b4dee720dc2cbc1(相同但全部小写):

enter image description here

该问题已通过使用 xCode 版本的 UDID 解决。这是在 xCode 中使用 ctrl+shift+2 找到的。

所以功能看起来像这样:

{
"capabilities":
[
{
"browserName":"Safari",
"deviceName": "iPod 5",
"udid":"a7bd67f34fa1b94651c832041b4dee720dc2cbc1",
"version":"8.4.1",
"maxInstances": 5,
"platform":"MAC",
"platformName": "iOS"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":10000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
"url":"http://0.0.0.0:4623/wd/hub",
"maxSession": 5,
"port": 4623,
"host": "0.0.0.0",
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}

testNG.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="tests" thread-count="2">
  <test name="Nexus 7">
    <parameter name="udid"  value="08da76c1" />
    <classes>
      <class name="testNG.TestOne"/>
    </classes>
  </test> <!-- Test -->
  <test name="HTC desrire">
    <parameter name="udid"  value="SH48CWT00563" />
    <classes>
      <class name="testNG.TestOne"/>
    </classes>
  </test> <!-- Test -->
    <test name="iPod Touch">
    <parameter name="udid"  value="a7bd67f34fa1b94651c832041b4dee720dc2cbc1" />
    <classes>
      <class name="testNG.TestTwo"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

我觉得这很奇怪,但它似乎有效。

利亚姆。

关于java - 带有 Appium 的 iOS Web 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33549297/

相关文章:

java - 如何在Java抽象类中声明未初始化的变量?

java - 导入 Java 类运行时和编译

ios - 加载时 heightForRowAtIndexPath 偶尔会崩溃,NSCoding - iOS

java - 为什么这个网站不能定位元素?

python - 如何使用 python 在 selenium webdriver 中将 cookie 设置为特定域?

java - 使用 selenium webdriver 关闭 webengage 或 clickdesk poup

java - 在java stringtemplate中的迭代中增加一个值

java - 过期密码修改失败

ios - 如何更改 Objective-C 中的 CBAdvertisementDataLocalNameKey 值?

iphone - 核心数据——如何插入数组