我使用Selenium WebDriver测试网站。我有PageObjects代表LoginPageHomePageManagementPage。我的测试首先登录,返回HomePage,然后单击返回ManagementPage的按钮。然后,它检查一堆东西,单击返回到HomePage的链接,然后单击注销链接。

这一切在Chrome上都可以正常使用,完全不用pageLoadTimeout。但是,在Firefox中,当尝试单击注销链接时会出现NoSuchElementException的提示。我认为这是因为尝试单击注销按钮时页面尚未完全加载。因此,在创建驱动程序之后,我在测试开始时放置了driver.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS)。我仍然遇到相同的错误。将超时更改为5 milliseconds可以证明超时有效,因为页面没有加载并且抛出了TimeOutException

如果我将driver.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS)移到HomePage的构造函数,则一切正常。因此,我可以通过为每个PageObject设置超时来解决我的问题。

我希望只能为每个驱动程序设置一次,这是我从this question收集的意思。但是this question表示pageLoadTimeout不适用于单击链接,这使我感到困惑,因为我确实为我工作,但前提是我为每个PageObject设置了它。

我还有其他事要做吗?还是将驱动程序传递给PageObject时重置超时?我看不到会发生什么,因为我在构造函数中所做的只是:

this.driver = driver;

最佳答案

pageLoadTimeout设置在引发错误之前等待页面加载完成的时间,而implicitlyWait指定驱动程序在搜索不存在的元素时应等待的时间。
同样,您不需要为每个页面设置此值,只需为每个驱动程序设置一次即可。

07-24 19:08