meow

  • 貌似启动 WDA 时还有很多依赖需要在线连 github 才能安装,比如 RoutingHTTPServer 、ocmock 之类的,果然不联网是无解的么……?

  • 谢谢大佬,好久没关注 appium,没想到竟然已经改头换面了。
    不过下来之后又发现好些依赖又变了,还得再捣鼓捣鼓环境问题……

  • #5 楼 @boyyao 哦,你这个目标属于开发一个复杂的程序,而不是编写测试脚本了。没干过正统的软件开发工作,就不瞎说免得误导你了。
    验证码的话,appiumdriver 不是可以截图吗?先整个屏幕截图,之后想办法获得验证码图片所处的位置坐标,再利用 java 处理图片的工具包把验证码所在的区域截出来就好了。(纯理论,没有验证过......)
    这里有个 python 的例子,可以看看https://testerhome.com/topics/1389 ,java 应该也有类似的工具包的。

  • #2 楼 @boyyao 你登录后直接判断一下只有登录成功才会显示的元素不就好了?比如登录后可以看到退出按钮,那就 AppiumDriverWait.findAndWait(driver, By.xpath("退出按钮"), 60L);,如果登录后 1 秒退出按钮就出现了,这个语句只需要 1 秒就执行完了。不明白你为什么要在一个脚本里连续判断 4 个元素......

  • 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 纯猜测。

meow