首先我想描述我的问题的动机。在开始执行javascript之前,有没有办法转换HtmlUnit加载的页面?
我有一个复杂的网页来测试硒+ HtmlUnit,它启动不同的JavaScript脚本。我描述的问题应该是相当普遍的。
页面上有一个按钮,jQuery在加载页面后绑定点击回调(click event handler)。有一个明确的Wait(这是一个Selenium术语)使按钮在测试代码中可点击。所以只要按钮变成可点击的,它就会被Selenium点击。但是,通常情况下,这发生在jQuery设法将按钮事件处理程序附加到按钮之前。在这种情况下,Selenium测试失败。
我想要做的是在页面开始执行javascript之前预处理由HtmlUnit访问的网页,在页面的开始处注入一些<script>myownscript()</script>
(以便它在该页面上的任何其他脚本之前执行)。然后,我将能够知道,控制Selenium测试代码中的某些条件,何时发生了点击事件处理程序的附加事件(我是如何做到的,取决于应用程序的细节)。如果我让Selenium点击按钮,那么点击事件处理程序的存在将得到保证,并且测试将按计划继续进行 - 由于缺少点击事件处理程序而没有错误。
让我们分开这个想法是好还是坏(当然,在尝试单击有问题的按钮之前,在Selenium测试代码中引入了足够大的延迟,但是随后测试的总体持续时间可能会有问题,因为我描述的问题存在于正在测试的应用程序的许多页面上)。 Selenium/HtmlUnit中是否有一些钩子允许预处理从服务器获取的页面,如我所述,在JavaScript开始在页面上执行之前注入脚本?
我还不清楚你的目的是什么。正如你所提到的,你应该添加等待元素。添加Wait很容易。 – Buaban
@Buaban我试图编辑问题以使其更清晰。 –