2016年11月18日,星期五

鸦片的隐式和显式等待

我们都面临着需要等待加载到移动应用程序中的情况。 Thread.sleep() 但不建议使用此方法,因为我们可以预测确切的等待时间。 鸦片提供了隐式等待和显式等待功能。当我们知道确切的等待时间时,可以使用隐式等待;当我们不知道确切的等待时间时,可以使用显式等待,但是我们需要等到任何移动元素可见为止。
 

在这篇文章中,我们将看到两种在Appium中广泛使用的等待类型:

视频 -  

 

1,隐含的等待
2.明确等待。

隐含的&与Appium明确等待
等着Appium

1,隐性等待

隐式等待意味着通知appium Web驱动程序等待特定的 时间量,以及等待后Web元素是否不可见 该特定点然后抛出“未找到此类元素异常”。 
查看下面给出的示例以了解如何使用隐式等待 在Appium测试用例中。在下面的测试用例中,我们将等待30 打开浏览器后的几秒钟,以便加载页面 由于我们隐式指定了时间和时间单位,因此这是 称为隐式等待。
方法 隐式地等待() 接受2个参数,第一个是时间值,第二个是时间单位,例如天,小时,分钟,秒,毫秒等。

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

2.明确等待-

在明确等待以及等待时间中,我们还提供等待 健康)状况。它将等到条件或最大等待时间 在引发异常之前提供”ElementNotVisibleException”。
可以说,显式等待是智能等待,因为它等待 动态地针对指定条件。查看以下测试案例 使用Appium Explicit等待的示例。首先,我们需要实例化 WebDriverWait Web驱动程序参考和时间范围内的等待对象 seconds.
然后我们可以使用 直到() 传递预期等待的方法 调整条件并在我们的测试用例中使用它,直到元素变为 在屏幕上可见。这里我们正在使用  visibleofElementLocated() 条件 找出其他条件,在Eclipse IDE中输入ExpectedConditions 然后按cltr +空格键,您将获得条件列表 您可以在“显式等待”中使用。


WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me")));      


这样,您就可以摆脱由于等待问题导致的测试用例失败。

希望这篇文章对您有所帮助。在Facebook或Google Plus上让我休闲,以获得最新的帖子更新。测试愉快。


17条评论:

  1. 感谢您在Appium上的所有帖子:)非常感谢

    回复删除
    回覆
    1. 感谢您阅读。许多即将在Appium上发布的帖子。通过Facebook和Google+保持联系

      删除
  2. 这两个隐式等待和显式等待都可以用于本机应用程序吗?可以一起使用吗?当我已经在@beforeClass设置隐式等待时,可以在其他@test中使用显式等待吗?那么哪个优先呢?

    回复删除
    回覆
    1. 回答你两个问题是"YES"您可以将其用于本机应用程序,也可以同时使用两种类型的等待。

      感谢造访 ,
      阿努加

      删除
  3. 明确的等待对我来说没有用

    回复删除
  4. 当Selenium脚本尝试查找不可见或不可交互的对象/元素时,隐式等待告诉WebDriver或Selenium脚本在一定时间内轮询DOM。
    xplicit wait告诉WebDriver在某些预期条件的基础上等待一段时间,然后再抛出“ElementNotVisibleException”例外,显式等待是仅适用于指定元素的特定等待。显式等待比隐式等待具有更好的灵活性。
    有关最佳示例链接的详细信息:

    http://www.qamantra.com/2018/01/how-to-use-explicit-and-implicit-wait.html

    回复删除
  5. 你好

    我正在面对wait.until(ExpectedConditions.elementToBeClickable(by))的问题;

    我的功能定义为

    公共静态MobileElement waitForMobileElementToBeClickable(by by){
    尝试{
    返回(MobileElement)wait.until(ExpectedConditions.elementToBeClickable(by));
    }
    catch(NoSuchElementException nse){
    System.out.println("找不到这样的元素!");
    返回null;
    }
    catch(TimeoutException toe){
    System.out.println("超时异常警告!");
    返回null;
    }
    }


    我得到的错误是这个

    警告:findElement抛出WebDriverException(By.name:登录设置)
    [testng] org.openqa.selenium.WebDriverException:无法将返回值转换为WebElement:{ELEMENT = CAE0CBA1-8A14-4BBA-86BA-EBAF83895B41}

    回复删除
  6. 感谢您的信息。很有帮助。我如何关注您的更多工作?

    回复删除
  7. 我真的很喜欢阅读您的文章。我想告诉您,您中有像我这样的人,对您的工作表示赞赏。

    techwithgeeks
    故事嗡嗡声
    奇才

    回复删除
  8. 很棒的帖子!我个人喜欢您的网站。 。阅读您的内容给我留下了深刻的印象。我期待您博客中的下一个有价值的信息性概念。总体优秀职位。继续:)做得好!
    准备修理
    家电维修
    交流维修和服务
    燃气灶维修
    笔记本维修
    我们的服务合作伙伴:
    孟买应召女郎
    护送服务在德里
    在线B2B市场
    萨塔·金(Satta King)

    回复删除
  9. 非常好的信息,它对很多人来说都是有价值的和有用的。感谢您分享此博客。
    B2B市场
    批发商
    我们的服务合作伙伴
    冰箱维修服务
    萨塔·金(Satta King)
    孟买应召女郎
    数码营销公司

    回复删除
  10. 我很佩服。我不't think I'我遇到了像您一样对这一主题了解甚多的人。您的消息灵通,非常聪明。您写了一些人们可以理解的东西,并使每个人都对它感兴趣。真的,您的博客很棒。
    B2B市场
    批发商
    我们的服务合作伙伴
    冰箱维修服务
    萨塔·金(Satta King)
    孟买应召女郎

    回复删除