在网上查找了等待控件的方法,自己去实践了一下,
在使用 WebDriverWait 进行显示等待时设置超时时间为 5 秒,但是并 5s 内没有出现控件时并没有抛出异常
麻烦大家帮看看,谢谢啦
问题描述:
问题 1、App 端是自己写的小 Demo,TextView 做了延迟 60s 显示,60s 后延迟显示坐标经纬度
WebDriverWait 设置了 5 秒的超时时间,理论上应该是会超时抛异常的,但是我发现并没有,不知道是为什么
问题 2、WebDriverWait 设置的超时和全局设置的隐示超时时间(driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);)有什么关系?
代码如下:

public class GPStest {

    public static void main(String[] args) throws InterruptedException {
        DesiredCapabilities capabilities = CapabilitiesTest
                .getAndroidCapabilities();
        AndroidDriver<WebElement> driver = null;
        try {
            driver = new AndroidDriver<WebElement>(new URL(
                    Capabilities.getUrl()), capabilities);
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

        printCurrentTime(1);
        waitForVisible(driver,
                By.xpath("//android.widget.TextView[contains(@text,'纬度')]"), 5);
        printCurrentTime(6);
        driver.quit();
    }

    public static void waitForVisible(WebDriver driver, final By by,
            int waitTime) {
        driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        WebDriverWait wait = new WebDriverWait(driver, waitTime);
        try {
            printCurrentTime(2);
            wait.until(ExpectedConditions.visibilityOfElementLocated(by));
            System.out.println("find");
            printCurrentTime(3);
        } catch (Exception e) {
            System.out.println("not find");
        }
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    }

    public static void printCurrentTime(int count) {
        System.out.print("count=" + count + "###");
        Date nowTime = new Date(System.currentTimeMillis());
        SimpleDateFormat sdFormatter = new SimpleDateFormat(
                "yyyy-MM-dd:hh-mm-ss");
        System.out.println(sdFormatter.format(nowTime));
    }
}

控制台信息显示如下:
count=1###2016-12-30:11-12-42
count=2###2016-12-30:11-12-47
find
count=3###2016-12-30:11-13-52
count=6###2016-12-30:11-13-52
Demo App 界面如下:

环境信息:
windows 7
Appium 版本:windows 安装包版本 1.4.16.1
Appium 客户端版本:java 4.1.2


↙↙↙阅读原文可查看相关链接,并与作者交流