Selenium Webdriver Java with TestNG & POM:我们是否应该对所有 Web 元素使用显式等待(ExpectConditions)



在我的项目中,web应用程序代码是由第三方开发的。客户端不知道是否使用了ajax或其他可能在不同时间加载web元素的技术。我们正在使用带有Java、TestNg和POM的SeleniumWebdriver自动测试web应用程序。对我们自动化的所有元素使用ExpectedConditions进行显式等待会是一种糟糕的做法吗?

截至今天(2022年9月4日(,我们正在对应用程序进行手动测试,以确定哪些模块首先要自动化,并注意到网页元素(文本框、链接、按钮、下拉列表等(似乎是随机加载的。因此,我们正在讨论是否应该使用明确的等待,而不是试错的基础。

对我们自动化的所有元素使用ExpectedConditions进行显式等待会是一种糟糕的做法吗?

在我看来,基本上不是。我经常通过等待元素可点击来识别它们;从你表达问题的方式来看,这听起来是可行的,更重要的是,如果你告诉Selenium不用等待就可以简单地获取元素,这将有助于避免任何ElementNotFoundException

然而,根据您的用例,您试图识别的元素可能永远不会被点击,甚至是可见或启用。在这种情况下,您可以简单地使用Expected Condition来等待元素出现。

对相关的Expected Conditions类的检查(我不确定您使用的是哪种语言,否则我会将其链接起来(将向您揭示您可以使用哪些明确的等待选项。

还有一条评论:你在测试一个基于JavaScript的前端吗?如果是这样的话,我建议您考虑Cypress、WebDriverIO或Playwright,它们都会更智能地等待JS页面/元素正确加载。

哇,我已经很久没有听到任何人说Ajax了。你可以使用显式等待,也可以只是轮询。这并没有太大区别,因为Webdriver等待也只是轮询一些事情。换句话说,由于Java是没有事件的,所以无论您发现什么更简单。

最新更新