我不知道如何在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启动selenium网格节点,并使用JSON信任:
{
"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部署的,它可以找到设备。
我是不是错过了一些最基本的东西?
谢谢你的帮忙,
利亚姆
发布于 2015-11-06 10:02:16
所以我找到了解决这个问题的方法。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 -->我觉得这很奇怪,但似乎很管用。
利亚姆。
发布于 2015-11-06 08:37:33
您不需要提供包id- capabilities.setCapability("bundleID","com.safariLauncher.safariLauncher");
Safari发射器在设备中自动启动,然后重定向到真实设备中的本地safari应用程序。另外,您不需要从xcode构建safari发射器。Safari与appium安装本身一起打包(您需要apple证书并将其作为reset.sh脚本的参数提供),.Appium文档解释了所有步骤。我建议你看一下appium文档。
https://stackoverflow.com/questions/33549297
复制相似问题