【问题标题】:Selenium - what is the difference between LoadableComponent and SlowLoadableComponentSelenium - LoadableComponent 和 SlowLoadableComponent 有什么区别
【发布时间】:2021-01-26 11:45:54
【问题描述】:

Selenium 支持类中LoadableComponent 和SlowLoadableComponent 的具体区别是什么?

如何以及何时使用其中一种?

【问题讨论】:

  • 如果在 isLoaded() 中找不到元素,LoadableComponent 将立即失败,而 SlowLoadableComponent 将重试,直到调用 .get() 时超时。 SlowLoadableComponent主要用于隐式等待动态添加到页面的元素。

标签: selenium selenium-webdriver automated-tests selenium-chromedriver refactoring


【解决方案1】:

我的理解是,您会同时使用需要一些时间来加载的组件或元素,并且验证加载的含义非常复杂,可以抽象为单独的方法 isLoaded。不同之处在于,对于LoadableComponent,对get() 的调用必须为您提供一个完全加载的组件,否则会引发错误,而SlowLoadableComponent 可能会在未加载的情况下返回。

也就是说,LoadableComponent 将用于您只对完全加载并准备好使用的元素感兴趣。您不介意等待它们完全加载并且没有案例在它们的中间状态与它们进行交互。如果他们无法加载 - 这意味着测试结束。我想象的主要用例只是隐藏页面加载背后的逻辑并等待它。

另一方面,SlowLoadableComponent 可以在完全加载之前从其get 方法返回,让您可以控制诸如在测试中对其加载时间进行断言(而不是在组件中硬编码)或拥有与可能影响组件加载的其他元素交互的机会。我可以想象一个依赖于SlowLoadableComponent 的测试用例在某些情况下(例如未勾选复选框)永远不会完全加载,这不是执行失败的原因。

【讨论】:

    【解决方案2】:

    SlowLoadableComponentLoadableComponent 的子类,但 不必在 load() 返回时完成加载。调用 load() 后,isLoaded() 方法将失败,直到组件完全加载。

    你使用SlowLoadableComponent,如果你不需要立即调用get()方法(因为它需要它完全加载)并且你想先继续执行一些其他的动作。但是一旦你需要执行get(),你应该申请isLoaded()以确保你可以继续你的代码。

    总体而言,SlowLoadableComponent 可以加快代码的执行速度,如果您在后期需要 get() 或者可能根本不需要它。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2021-02-16
      • 2016-01-09
      • 2015-01-10
      • 2014-05-18
      相关资源
      最近更新 更多