【发布时间】:2016-06-25 19:46:59
【问题描述】:
首先我想描述一下我提出问题的动机。
我有一个复杂的网页要使用 Selenium + HtmlUnit 进行测试,它会启动各种 javascript 脚本。我描述的问题应该很常见。
页面上有一个按钮,在页面加载后,jQuery 会绑定一个点击回调(点击事件处理程序)。有一个明确的等待(这是一个 Selenium 术语)按钮在测试代码中变为可点击。因此,一旦按钮变得可点击,Selenium 就会点击它。然而,这通常发生在 jQuery 设法将 click 事件处理程序附加到按钮之前。在这种情况下,Selenium 测试失败。
我想做的是在 javascript 开始在页面上执行之前预处理 HtmlUnit 访问的网页,在页面的开头注入一些 <script>myownscript()</script>(以便它在该页面上的任何其他脚本之前执行)。然后我将能够知道,控制 Selenium 测试代码中的某些条件,何时发生单击事件处理程序的附加(我究竟如何做到这一点,取决于应用程序的细节)。如果我让 Selenium 单击按钮,那么将保证单击事件处理程序的存在,并且测试将按计划继续进行 - 由于缺少单击事件处理程序而不会出现错误。
让我们撇开这个想法是好是坏的问题(当然,一个更简单的问题是在尝试单击有问题的按钮之前在 Selenium 测试代码中引入足够大的延迟,但是那么测试的整体持续时间可能存在问题,因为我描述的问题存在于正在测试的应用程序的许多页面上)。 Selenium/HtmlUnit 中是否有一些钩子允许预处理从服务器获取的页面,在 javascript 开始在页面上执行之前注入我描述的脚本?
【问题讨论】:
-
我仍然不清楚你的目的是什么。正如您所提到的,您应该添加 Wait for 元素。添加等待很容易。
-
@Buaban 我试图编辑问题以使其更清晰。
标签: javascript java selenium testing htmlunit