之前使用iOS手机做UI自动化都是在Mac电脑上进行的,但是比较麻烦,后来看到由阿里开源的tidevice工具可以实现在windows上启动WDA,就准备试一下,记录一下过程。
tidevice的具体介绍可以参考一下这篇文章:tidevice 开源:不依赖 Xcode 也能启动 WDA · TesterHome
环境准备
使用tidevice需要用到的环境包括:
- python
- tidevice
- iTools
- appium v1.20.0以上
- 已经安装WDA的iOS真机
安装tidevice
安装好python环境后,使用以下命令安装tidevice
pip3 install -U tidevice
安装后输入命令tidevice version查看版本
命令tidevice list查看连接的设备
命令tidevice applist查看设备上安装的应用
启动WDA
使用命令tidevice -u [设备udid] wdaproxy -B [wda的bundleid] --port 8100启动WDA
此时在浏览器中打开地址http://127.0.0.1:8100/status ,显示如下信息就表示WDA启动正常了
使用Appium+tidevice进行自动化
在appium配置中参照以下设置:
{ "platformName": "ios", "deviceName": "iPhone", "platformVersion": "13.6", "bundleId": "目标app的bundleid", "udid": "iphone的udid", "webDriverAgentUrl": "http://localhost:8100", "noReset": true, "usePrebuiltWDA": false, "useXctestrunFile": false, "skipLogCapture": true, "automationName": "XCUITest" } 例如: package testcase; import io.appium.java_client.ios.IOSDriver; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.ui.WebDriverWait; import java.net.MalformedURLException; import java.net.URL; import java.util.function.Function; public class IosTest { private static IOSDriver iosDriver; public static void main(String[] args) throws MalformedURLException { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("udid", "设备序列号"); capabilities.setCapability("deviceName", "设备名称"); capabilities.setCapability("platformVersion", "11.3"); capabilities.setCapability("bundleId", "被测应用的bundleId"); capabilities.setCapability("webDriverAgentUrl", "http://localhost:8100"); capabilities.setCapability("usePrebuiltWDA", "false"); capabilities.setCapability("useXctestrunFile", "false"); capabilities.setCapability("skipLogCapture", "true"); capabilities.setCapability("platformName", "iOS"); capabilities.setCapability("automationName", "XCUITest"); iosDriver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); WebElement element = findElement(iosDriver, "//XCUIElementTypeButton[@name='理财']"); element.click(); element = findElement(iosDriver, "//XCUIElementTypeStaticText[@name='全部']"); element.click(); } private static WebElement findElement(WebDriver driver, String xpath){ WebDriverWait wait = new WebDriverWait(driver, 60); return wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver webDriver) { return webDriver.findElement(By.xpath(xpath)); } }); } }
遇到的问题
1.最开始使用appium1.15.1,创建driver时appium一直报错
后来才发现tidevice要求appium要在1.20.0及以上版本
转载来源 https://blog.csdn.net/y954227239/article/details/121146835
我使用的是python写的代码,下面是python的appium使用的代码
我使用的appium版本:1.21.0, iuntes版本:12.12.1.1, tidevice版本0.4.3
appium:
{ "platformName": "ios", "deviceName": "iPhone 8p", "platformVersion": "13.6", "bundleId": "com.xixxx.xxx", "udid": "00008020-001C25413", "webDriverAgentUrl": "http://localhost:8100", "noReset": true, "usePrebuiltWDA": false, "useXctestrunFile": false, "skipLogCapture": true, "automationName": "XCUITest" }
python:
desired_caps = {
"platformName": "ios",
"deviceName": "iPhone",
"platformVersion": "14.3",
"bundleId": "com.xxx.xxx",
"udid": "00008020-001C25413",
"noReset": True,
"usePrebuiltWDA": False,
"useXctestrunFile": False,
"skipLogCapture": True,
"automationName": "XCUITest",
"webDriverAgentUrl": "http://127.0.0.1:8100"
}
driver = webdriver.Remote('http://127.0.0.1:4723' + '/wd/hub', desired_caps)
driver.implicitly_wait(3)
sleep(10)
return driver
原创文章,转载请注明出处:http://124.221.219.47/article/windows_appium_ios/