上文书我们讲到升级到xcode8 之后,iOS 8.4 的case依然不能正常使用,我的第一个解决方案是两台mac环境,xcode 7.x +appium 1.5.3 和xcode 8.x+ appium 1.6.x,第一套方案比较容易理解。今天在Appium论坛看到第二种解决方案,xcode7.x +xcode 8.x+Appium 1.6.x 混搭方案,实测毫无压力。
本来想用第一种方案给的demo,前两天一直在搞MacOS 虚拟机安装,并未能成功安装,今天我采取第二种方案Demo。
主要针对目前已经是xcode 8+ Appium1.6.x的环境。
首先需要说明一下,大多数公司,如果使用Appium,一般都是从Appium拉的源码自己改自己维护的,如果你所在的项目用Appium,建议你还是自己维护一套Appium。
安装下载安装xcode 7.3.1 。我这里已经安装好,⚠️注意,先把你的xcode8 改名。
然后安装完毕后把xcode7 改名,通过
sudo xcode-select --switch /Applications/Xcode7.app
sudo xcode-select --switch /Applications/Xcode8.app
切换xcode版本。
注意
首先要注意不同版本的iOS同名问题,如果你的simulator同名,建议修改。
其次,xcode 7与xcode 8的工程文件不同,要把app的源码分成两个文件夹,分开维护,分开打包。
首先切换到xcode 7:
sudo xcode-select --switch /Applications/Xcode7.app
执行case 完毕,如果需要跑10.1 的case呢,就需要切换到xcode 8
sudo xcode-select --switch /Applications/Xcode8.app
你可以通过testng 传入你要跑case的platform版本,自行百度 data provider。
我这里只提供一种解决思路,从我的实测效果来看,一套代码妥妥解决问题。
可能有朋友遇到xpath不能用了,你可以加一个if语句啊,so easy!
核心代码
package main.java.com.dbyl.appiumCore.tests;
import io.appium.java_client.MobileElement;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import main.java.com.dbyl.appiumServer.AppiumServerUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
public class iOSBrowser {
IOSDriver<MobileElement> driver;
public URL url;
DesiredCapabilities capabilities = new DesiredCapabilities();
@BeforeClass(alwaysRun = true)
public void startAppiumServer() {
capabilities.setCapability("platformName", "iOS");
//只需要在这里使用data provider控制一下版本,传入不同的版本号
capabilities.setCapability("platformVersion", "10.1");
AppiumServerUtils.getInstance().stopServer();
url = AppiumServerUtils.getInstance().startServer("127.0.0.1", 4723, capabilities);
}
@BeforeMethod
public void setUpDriver() throws MalformedURLException {
capabilities.setCapability("browserName", "safari");
if (capabilities.getCapability("platformVersion").toString().contains("10")) {
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
capabilities.setCapability("platformVersion", "10.1");
capabilities.setCapability("deviceName", "iPhone SE");
} else {
capabilities.setCapability("platformVersion", "8.4");
capabilities.setCapability("deviceName", "iPhone 5s");
}
driver = new IOSDriver<MobileElement>(url, capabilities);
}
@Test
public void iOSTest() {
driver.get("http://www.baidu.com");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
JavascriptExecutor jse = (JavascriptExecutor) driver;
String status = (String) jse.executeScript("var status=document.readyState;return status");
Assert.assertTrue(status.contains("complete"));
System.out.println(driver.getTitle());
jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById('index-kw').value='appium'");
driver.findElement(By.xpath("//button[@id='index-bn']")).click();
System.out.println(driver.getTitle());
Assert.assertTrue(driver.getTitle().contains("appium"));
}
@AfterClass
public void afterTest() {
driver.quit();
}
}
浙公网安备 33010602011771号