在selenium测试中运行jQuery .click()的正确方法是什么?被点击的元素是一个超链接。
HTML:
<div id="buttons">
<a class="button" id="btnRun" href="javascript:void(0)">Run</a>
</div>
<div id="output" />
的jQuery
$(document).ready(function () {
$('#btnRun').click(function () {
$("#output").html("hello world");
});
})
硒:
[Test]
public void TestOutput()
{
selenium_local = new DefaultSelenium("localhost", 4444,
"*firefox", "https://localhost");
selenium_local.Start();
selenium_local.Open("/TestPage");
selenium_local.WaitForPageToLoad("30000");
Assert.That(selenium_local.IsElementPresent("id=btnRun"), Is.True);
selenium_local.Click("id=btnRun");
Thread.Sleep(5000);
// also tried without success:
// selenium_local.FireEvent("id=btnRun","click");
// selenium_local.Click("xpath=//a[@id='btnRun']");
// selenium_local.Click("dom=document.getElementById('btnRun')");
Assert.That(selenium.GetValue("id=output"), Is.EqualTo("hello world"));
}
当我运行测试时,按钮单击不会发生,并且在第二个WaitForPageToLoad
之后,测试结束并报告失败(因为找不到文本hello world,因为从未发生按钮单击)
答案 0 :(得分:1)
(注意:我在java中使用selenium,因此可能有所不同,但我强烈怀疑它)
我有时会遇到类似的问题,但是我们在某些地方使用普通ol-javascript,在其他地方使用gwt,在其他地方使用mootools(不要问为什么这么多)以便我们使用不同的ajax调用,所以它是可能我们的问题完全不相关。但是,也许我可以随时提供帮助。
有时我必须使用mouseOver
然后使用click
。有时我甚至必须mouseDown
然后mouseUp
。或两者的结合。即使在某些情况下,我们也必须重试点击。
(另外,除非单击链接/按钮导致整页加载,否则WaitForPageToLoad将导致问题,因为它等待页面加载事件。Here's how I ended up waiting for Ajax calls to finish,但是你应该能够想出一个cleaner solution如果您只使用JQuery)
答案 1 :(得分:0)
某些JavaScript库响应鼠标注释事件,表示“点击”。如果是这样,MouseDown()后跟MouseUp()应该完成这项工作。