【问题标题】:How to record ajax based sites using Selenium如何使用 Selenium 记录基于 ajax 的网站
【发布时间】:2011-01-07 09:37:13
【问题描述】:
【问题讨论】:
标签:
ajax
selenium
selenium-ide
selenium-grid
【解决方案1】:
Ajax 有点混乱,并且与 Selenium 一起工作。您的问题没有简单的答案,但我有一些提示..
您将需要使用很多这样的循环来等待操作/更新等:
for (int second = 0;; second++) {
if (second >= 60) log.error("Timeout (60 seconds) while submitting request");
try { if (selenium.isElementPresent("elementID")) break; } catch (Exception e) {}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
此外,启用 Ajax 的页面也会多次触发事件,例如将字符输入到 TextBox 中,然后 selenium.type("elementID", "12345"); 不会为您处理它。 typeKeys("elementID", "12345"); 将触发事件。
使用 FireFox 和 firebug,使用 javascript 调试器分析后台发生的情况。我更喜欢使用 Chromes Inspect 调试器。与您的开发人员交谈,了解某些元素等触发了什么。
其次,您可以看看最新版本的 Selenium 2.0。 Web 驱动程序应该可以更好地处理 Ajax 请求,但我还没有时间使用。
因此,简而言之,您将不得不自己编写大量代码并修改记录的部分。如果无法解决,那么一些商业代码可以更好地处理某种类型的 Ajax。
【解决方案2】:
如果您使用的是 XPath,那么它将无法工作。试试 CSS 定位器。我在 RC 中使用 Sizzle.js 定位器,它适用于所有 ajax 元素。
对于 IDE,您可以选择可用的插件或编写自己的插件并使用 user-extensions.js 选项插入它。