我使用Selenium WebDriver测试网站。我有PageObjects代表LoginPage
,HomePage
和ManagementPage
。我的测试首先登录,返回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
指定驱动程序在搜索不存在的元素时应等待的时间。
同样,您不需要为每个页面设置此值,只需为每个驱动程序设置一次即可。