貌似启动 WDA 时还有很多依赖需要在线连 github 才能安装,比如 RoutingHTTPServer 、ocmock 之类的,果然不联网是无解的么……?
谢谢大佬,好久没关注 appium,没想到竟然已经改头换面了。
不过下来之后又发现好些依赖又变了,还得再捣鼓捣鼓环境问题……
#5 楼 @boyyao 哦,你这个目标属于开发一个复杂的程序,而不是编写测试脚本了。没干过正统的软件开发工作,就不瞎说免得误导你了。
验证码的话,appiumdriver 不是可以截图吗?先整个屏幕截图,之后想办法获得验证码图片所处的位置坐标,再利用 java 处理图片的工具包把验证码所在的区域截出来就好了。(纯理论,没有验证过......)
这里有个 python 的例子,可以看看https://testerhome.com/topics/1389 ,java 应该也有类似的工具包的。
java 实现
写一个类,继承 FluentWait,例如:
public class AppiumDriverWait extends FluentWait
构造方法:
public AppiumDriverWait(AppiumDriver driver, long timeOutInSeconds) {
this(driver, new SystemClock(), Sleeper.SYSTEM_SLEEPER, timeOutInSeconds, DEFAULT_SLEEP_TIMEOUT);
}
然后在类里面用内部类 ExpectedCondition,实现 apply 方法查找元素
public static WebElement findAndWait(AppiumDriver driver, final By by, long timeout) {
WebElement ele = new AppiumDriverWait(driver, timeout)
.until(new ExpectedCondition() {
public WebElement apply(AppiumDriver d) {
return d.findElement(by);
}
});
return textView;
}
最后在你的脚本里面用如下语句查找页面元素
AppiumDriverWait.findAndWait(driver, By.xpath("xpath"), 60L);
60 秒内找到就返回 webelement,找不到就报 RuntimeException。
不过这是比较老的方法了,据说现在 selenium 最新 jar 包是 java8 平台上的了,java8 支持函数闭包,应该会有更简洁的方法实现此功能。没用过 java8,也没用过 selenium3.0 纯猜测。