导航

Appium 1.6.x遇到的问题

Posted on 2017-07-31 21:19  Young哥哥  阅读(58)  评论(0)    收藏  举报

上文书我们讲到升级到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();
}

}