这个版本是没有元素序号的,我自己总结的经验是元素序号可以自己数的!
同一级下相同的元素第一个就是【1】第二个就是【2】,不同的元素重新数。
就比如说你贴的这个代码:
XCUIElementTypeOther[3] 这个就是在这一级下你要点击的元素在第三个 XCUIElementTypeOther(这里是说第三个相同的 XCUIElementTypeOther)中。
XCUIElementTypeOther[2] 同上,在第二个中。
右边不是有元素的属性吗,你可以直接根据这些属性编写脚本
笨办法利用节点一级一级的去找你要点击的元素
相对方便的可以通过查找属性进行点击事件 比如:@name="搜索"
doubleTap(双击屏幕)click(单击屏幕)longTap (长按屏幕)
我之前用的是 Xcode7.3 的 instruments 中的 AUtomation,那个相对来说要快捷一些,但是那个没法查看元素,只能利用坐标去定位,之后 IOS 升级到 10 之后 Xcode8 删除了 AUtomation,然后就尝试 appium1.5.3,没想到支持 IOS10 以上版本的,要升级到 1.6.0—+Xcode8 以上,但是 appium-desktop 之前都没有 GUI 界面,还好现在这个版本不管怎么麻烦吧,至少有个解决方法了。等以后有更快捷的方法时候再分享吧。
是啊 这个执行起来太费劲了,如果之后万一 app 作修改了,js 维护起来也特别的费劲,整不好还要重新编译。
暂时没想起来好的方法,先用笨办法试试能不能进行 app 的自动化测试。之后再去考虑更加简便的方法!
"app" "udid" "bundleId"是自己的 我这边不方便给你展示
"use strict";
var wd = require("wd");
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
chai.should();
chaiAsPromised.transferPromiseness = wd.transferPromiseness;
var desired = {
"appium-version": "1.0.0-beta.2",
"platformName": "iOS",
"automationName": "XCUITest",
"platformVersion": "10.2.1",
"deviceName": "iPad Air",
"app": "appPATH",
"udid": "自己输入",
"noReset": true,
"bundleId": "apple的证书"
};
var browser = wd.promiseChainRemote("127.0.0.1", 4723);
browser.init(desired).then(function() {
return browser
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeCollectionView[1]/XCUIElementTypeCell[1]/XCUIElementTypeOther[1]/XCUIElementTypeStaticText[1]')
.sleep(5000)
.click()
.sleep(5000)
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther[1]/XCUIElementTypeOther[2]/XCUIElementTypeButton[1]')
.sleep(5000)
.click()
.sleep(5000)
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[1]')
.sleep(5000)
.click()
.sleep(5000)
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther[3]/XCUIElementTypeOther[2]/XCUIElementTypeTable[1]/XCUIElementTypeCell[1]/XCUIElementTypeStaticText[1]')
.sleep(5000)
.click()
.sleep(5000)
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[4]')
.sleep(5000)
.click()
.sleep(5000)
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[4]')
.sleep(5000)
.click()
.sleep(5000)
.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther[3]/XCUIElementTypeOther[2]/XCUIElementTypeOther[1]/XCUIElementTypeTable[1]/XCUIElementTypeCell[1]/XCUIElementTypeStaticText[1]')
.sleep(5000)
.click()
//.elementByXPath('//XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeSegmentedControl[1]/XCUIElementTypeButton[2]')
//.click()
.sleep(5000)
.fin(function() {
return browser.quit();
});
}).done();
只是单纯的几个 app 中的点击操作的话 我觉得还可以 复杂的动作(画线,拖动)我没试
应该不能 我是研究了很久,因为两个版本的测试框架变了。我觉得这个版本不好用的原因还是因为没有 Xpath,导致编写测试脚本的时候,元素的位置不太好判断。效率大大的降低了
我是拿着 Appium1.5.3 录制的 js,放到这个环境下去执行。js 基本上改了一个整遍,元素全部从 UIA 变成 XCUI 了 并且没有 Index,没办法我就根据 inspector 中的元素树状图,去查每个元素的 Index,贼麻烦。
试过的,但是并不好用, 我在 // 前写的是 " 我在想是不是要改成 ’ ,这个需要改吗
appium 现在不是不支持 name 的属性了吗
这样的话 元素界面里边没有 Index,那我们怎么去编写 app 里边点击事件的代码呢!Xpath 又是怎么去识别的呢