有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Appium的隐式wait不起作用

我正在使用Appium自动化iOS应用程序,但遇到了一个问题,以前有人遇到过同样的问题吗

Appium的implicitlyWaitAPI似乎不起作用。我正在使用Java和JUnit运行测试,下面是一行代码:

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

我已检查了appium控制台中的调试信息,它看起来正确:

info: [debug] Set iOS implicit wait to 50000ms

我的环境:

最新的Appium 1.2.1、Java客户端库1.6.1、Selenium Java语言绑定2.42.2和Sauce实验室提供的示例应用程序“UICatalog”

提前感谢您的回复


共 (5) 个答案

  1. # 1 楼答案

    设置隐式超时的新方法是使用代码

    AppiumFieldDecorator decorator = new AppiumFieldDecorator(mobDriver);
    decorator.DEFAULT_IMPLICITLY_WAIT_TIMEOUT = longValue;
    decorator.DEFAULT_TIMEUNIT = TimeUnit.TimeUnit ;
    

    希望这有帮助

  2. # 2 楼答案

    试试这个:

    public static void WaitForElementPresent1(String locator, int timeout)
    {
        WebDriverWait wait = new WebDriverWait(driver, timeout);
        try{   
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator)));
        } catch (Exception e){
            e.printStackTrace();
        }
     }
    
  3. # 3 楼答案

    在Appium中,可以通过以下方式设置隐式方式:

    Java代码:

    AppiumFieldDecorator decorator = new AppiumFieldDecorator(driver);
    decorator.resetImplicitlyWaitTimeOut(50, TimeUnit.SECONDS);
    PageFactory.initElements(decorator, this /* refers to current page object class*/);
    

    这样的超时将一直有效

    改变它是不可能的(至少我不知道)

    当使用web驱动程序时,您可以通过以下方式实现:

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    // some actions for which you don't want to wait implicitly
    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
    
  4. # 4 楼答案

    如果您使用的是PageFactory模型,则可以使用initElements()方法指定隐式等待,如下所示-

    PageFactory.initElements(new AppiumFieldDecorator(driver, 10, TimeUnit.SECONDS), this);
    

    我在Appium 1.6上试用过,效果很好

  5. # 5 楼答案

    您发布的代码将超时管理为最多等待50秒。这不会让司机等50秒。您可以像这样使用等待:

     driver.wait(); //this will wait a max of 50 seconds cuz you said so
    

    如果你问我,你想使用等待Webdriver的正确方式是:

    WebDriverWait wait;
    wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.elementToBeClickable(By.id("blabla"));
    

    上面的代码检查blabla是否可点击,直到该条件被证明或60秒(如上所述)过去,驾驶员等待