我使用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;
答案 0 :(得分:3)
pageLoadTimeout
设置在抛出错误之前等待页面加载完成的时间,而implicitlyWait
指定驱动程序在搜索元素时应该等待的时间(如果不是立即)目前,
此外,您不需要为每个页面设置此值,您需要为每个驱动程序设置一次。