Appium 中的 JS 就是基于 mocha 的,如果受不了 Promise 的写法,可以使用这个包来写:yiewd。
我感觉 node 和 python 写法应该差不多 (就两行):
contexts = yield driver.contexts();
yield driver.context(contexts[contexts.length - 1]);
你上面的切换写死了 context:WEBVIEW_com.sina.book
,你咋能确定当前手机当前 APP 当前 WebView 的 context 是这个呢?不是这个 Appium 会报错,你需要先用 Appium 自己取读取这个值,具体方法你得查 WD 的 API。
我写的例子是用 Node 的。错误日志,最好看 Appium 的 log。
切换到 APP 中的 webview,首先要得到这个 webview 对应的上下文(context),wd 中有个方法可以获取当前全部的 contexts,一般 APP 里面每个 webview 对应的 context 都不同,在不同机器上也不会相同,你不能写死了,要先把 contexts 取到。
比方你刚刚打开了一个 webview,这个时候 contexts 的最后一个字符串就是这个 webview 的 context。
先获取全部的 contexts:
const contexts = yield driver.contexts();
contexts 是个数组,第一个是原生,例如是:NATIVE_APP
。每打开一个 webview,contexts 数组就会插进来一个值,contexts[contexts.length -1]
就是当前的 context 了,然后切换一下:
yield driver.context(contexts[contexts.length -1];
我觉得你这个思路不对:
findElementByName()
是可以找到该元素,但是无法点击,因为该元素不在可见区域。wd 中有个方法是isDisplayed()
,可以判断所需元素是否可见,可见则点击,看不见则下滑,以下是个 node 的例子:
let element, flag = true;
while(true) {
element = yield driver.elementByName('客户A').isDisplayed();
if (element) {
yield driver.elementByName('客户A').click();
flag = false;
} else {
yield driver.swipe_up();
}
}
ios 的安装包得是 .app
格式的
#7 楼 @wangjl726 我也刚学不久,是个菜鸡,一起学习
#4 楼 @wxhhxx123 Appium1.6.x 的没有,推荐用 Macaca 的 App Inspector
使用 XCUITest 启动:
appium --platform-name iOS --automation-name XCUITest
#3 楼 @seveniruby
都是常用的插件:
#1 楼 @hu_qingen 编辑器是 Atom
#7 楼 @qq386169040-github 好吧,只能坐等了更新版本了
#2 楼 @seveniruby 娱乐大众,不求回报
#3 楼 @Lihuazhang 别打我,我只是说说我的感受,我写的地方还是很多赞美的
我想问:iOS 上有没有方案可以日志上报,只做一个回归看页面正不正常,现在的做法就是找有没有几个主要的 DOM 配合截图。那么如何才可以准确度较高地去判断一个 Hybrid 是否加载正常?
我能问一下,macaca 发现了 bug,可以用什么办法可以读取浏览器或者移动设备的 log 并记录吗,小白的我只晓得截图。
#15 楼 @babylon 我强行把 /node/v6.9.1/lib/node_modules/macaca-ios/node_modules/remote-debugger/lib/remote-debugger.js 中的 devices:deviceId,deviceName,改成模拟器的 ID 了,这样执行 contexts() 没问题。
另外感觉是 macaca-wd 中,driver.init() 这个方法有问题,即使我设置的是 iOS9.3,启动的模拟器仍然是 10.0 的,后面 remote-debugger.js 得到的 devices 一直是:
[{
"deviceId": "SIMULATOR",
"deviceName": "SIMULATOR",
"url": "localhost:9222"
}]
这应该是默认值吧,没有得到正确的 devices。