- 我使用的是真实设备
- 我正在尝试基于网络的测试
- 我有一个完整的适用于 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
:
但 xCode UDID 是 a7bd67f34fa1b94651c832041b4dee720dc2cbc1
(相同但全部小写):
该问题已通过使用 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/