C#Selenium RC - 如何测试jQuery按钮点击?

时间:2011-04-06 03:24:34

标签: c# jquery testing selenium selenium-rc

在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,因为从未发生按钮单击)

2 个答案:

答案 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()应该完成这项工作。