页面重新加载时的 Selenium 隐式等待功能
Selenium implicit wait functionality on page reload
我正在编写一个测试,我在其中查找页面上的元素,然后重新加载页面。
步骤:
- 使用 selenium webdriver(java) 打开 firefox 浏览器。隐式等待设置为 30 秒。
- 导航到网页。验证元素是否带有
id="elementid"
存在。
- 现在重新加载页面。验证元素是否带有
id="elementid"
存在。
我想知道以下用例中的行为。
**
- 万一刷新不正常,显示的页面是
旧页面而不是重新加载的页面,selenium return 会是真的吗
当我用
id="elementid"
验证元素是否存在时
尽管页面实例是旧的?还是会抛出异常?
**
无论页面是旧页面还是新页面还是已加载都没有关系 partially.It 仅当元素不在 DOM 或 [=16] 中时才会抛出异常=] 这就是 Selenium 的工作原理
如果您验证元素是否存在,它会 return 为真 DOM
FindElement
This method is affected by the 'implicit wait' times in force at the
time of execution. The findElement(..) invocation will return a
matching row, or try again repeatedly until the configured timeout is
reached.
共有三个选项:
- 在您触发重新加载和再次查找元素之间没有发生页面重新加载
- 在您触发重新加载和再次查找元素之间发生(并完成)页面重新加载
- 在您触发重新加载和再次查找元素之间发生了页面重新加载(但未完成)
取决于 Selenium 是否在页面重新加载后分配了内部元素 ID,您可以有或没有 StaleElementReferenceException。
这就是我在我的框架中处理它的方式:
- 为您与之交互的每个页面对象创建 waitForPageToLoad() 方法,并在该页面上的任何其他方法之前调用它;此方法应等到某些(此页面唯一的)元素出现(或显示)
- 在触发页面重新加载和另一个元素查找之间调用此方法
- 为典型的元素交互(点击、发送键等)创建包装方法,在该级别处理 StaleElementReferenceException(通常通过显式等待并重新进行相同的交互,没有其他方法可以处理这个 class例外)
检查进展情况,如果可能添加唯一页面元素的验证(如果有任何唯一页面元素在页面重新加载后存在,但之前不存在),如有必要,在第二次元素查找之前添加显式等待。
无论如何它都会尝试搜索元素。
万一它突然消失了 - 你得到 StaleElementReferenceException
如果它不存在 - NoSuchElementException
如果您认为(不)重新加载页面这一事实对您的测试很重要,并且您真的想知道(或采取适当的措施),请使用 document.readyState
将其检查为 complete
(加载时)或不 complete
(仍在加载时)
我正在编写一个测试,我在其中查找页面上的元素,然后重新加载页面。
步骤:
- 使用 selenium webdriver(java) 打开 firefox 浏览器。隐式等待设置为 30 秒。
- 导航到网页。验证元素是否带有
id="elementid"
存在。 - 现在重新加载页面。验证元素是否带有
id="elementid"
存在。
我想知道以下用例中的行为。
**
- 万一刷新不正常,显示的页面是
旧页面而不是重新加载的页面,selenium return 会是真的吗
当我用
id="elementid"
验证元素是否存在时 尽管页面实例是旧的?还是会抛出异常?
**
无论页面是旧页面还是新页面还是已加载都没有关系 partially.It 仅当元素不在 DOM 或 [=16] 中时才会抛出异常=] 这就是 Selenium 的工作原理
如果您验证元素是否存在,它会 return 为真 DOM
FindElement
This method is affected by the 'implicit wait' times in force at the time of execution. The findElement(..) invocation will return a matching row, or try again repeatedly until the configured timeout is reached.
共有三个选项:
- 在您触发重新加载和再次查找元素之间没有发生页面重新加载
- 在您触发重新加载和再次查找元素之间发生(并完成)页面重新加载
- 在您触发重新加载和再次查找元素之间发生了页面重新加载(但未完成)
取决于 Selenium 是否在页面重新加载后分配了内部元素 ID,您可以有或没有 StaleElementReferenceException。
这就是我在我的框架中处理它的方式:
- 为您与之交互的每个页面对象创建 waitForPageToLoad() 方法,并在该页面上的任何其他方法之前调用它;此方法应等到某些(此页面唯一的)元素出现(或显示)
- 在触发页面重新加载和另一个元素查找之间调用此方法
- 为典型的元素交互(点击、发送键等)创建包装方法,在该级别处理 StaleElementReferenceException(通常通过显式等待并重新进行相同的交互,没有其他方法可以处理这个 class例外)
检查进展情况,如果可能添加唯一页面元素的验证(如果有任何唯一页面元素在页面重新加载后存在,但之前不存在),如有必要,在第二次元素查找之前添加显式等待。
无论如何它都会尝试搜索元素。
万一它突然消失了 - 你得到 StaleElementReferenceException
如果它不存在 - NoSuchElementException
如果您认为(不)重新加载页面这一事实对您的测试很重要,并且您真的想知道(或采取适当的措施),请使用 document.readyState
将其检查为 complete
(加载时)或不 complete
(仍在加载时)