Selenium RemoteWebDriver中的批处理/原子操作?

时间:2015-04-02 08:54:54

标签: java javascript selenium

查看RemoteWebDriver的源代码,每个操作(包括获取刚刚获得的WebElement的文本)都需要向浏览器发送单独的命令。我担心在高度动态的Javascript Web应用程序中,这可能会导致读取/随机异常不一致。

有人能解释一下Selenium调用是如何与页面上的JavaScript事件队列同步的吗?如果它们没有同步,除了嵌入大量的自定义JavaScript之外,还有什么方法可以在批处理/事务/原子操作中进行多个Selenium调用吗?

1 个答案:

答案 0 :(得分:1)

Selenium不提供任何设施来确保任何单个Selenium操作以原子方式完成,或者多个操作作为单个原子事务的一部分执行。例如,如果要点击的元素在Selenium单击时移动,则单击操作可能会失败。

是的,这可能会导致问题。您可以编写代码,以便它可以从恶劣的条件中恢复。您需要知道您正在与之交互的内容和:

  1. 等待表明用户界面稳定的情况。例如,我在某些页面上有Datatables个表。在测试表包含正确信息之前,我检查的一件事是确保在更新表时Datatables自动弹出的小横幅不可见。否则,我可能正在检查尚未更新的表,但仍包含旧数据。

  2. 检测到错误状态并恢复。在一种情况下,我想单击UI的一部分中的按钮,该按钮基于各种条件进行刷新。无论我在刷新之前还是之后点击按钮都没关系,但问题是如果在我获得按钮和我尝试点击按钮之间发生刷新,Selenium会引发StaleElementReferenceException。我必须捕获此异常,重新获取按钮并尝试再次单击它。 (对于记录,在这种情况下,在点击之前测试用户界面是不值得的。点击将在99.999%的时间内完成,而不必再次尝试。)