• #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<AppiumDriver>
    构造方法:
    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<WebElement>() {
    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纯猜测。