【问题标题】:C# Selenium RC - How to test a jQuery button click?C# Selenium RC - 如何测试 jQuery 按钮点击?
【发布时间】:2011-04-06 03:24:34
【问题描述】:

在硒测试中运行 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,因为按钮点击从未发生)

【问题讨论】:

  • 在你的 jQuery 代码中,你需要把 $("#output").html("hello world");
  • 对不起,这只是一个例子,当手动点击按钮时,它确实做了一些事情(加载一个 jqgrid)。但在测试中,点击甚至没有执行

标签: c# jquery testing selenium selenium-rc


【解决方案1】:

(注意:我在 java 中使用 selenium,所以可能会有所不同,但我强烈怀疑)

我有时会遇到类似的问题,但我们在某些地方使用 plain-ol'-javascript,在其他地方使用 gwt,在其他地方使用 mootools(不要问为什么这么多)用于我们不同的 ajax 调用,所以它是可能我们的问题完全不相关。但是,也许我可以帮忙。

有时我必须使用mouseOver 然后click。有时我什至必须先做mouseDown,然后再做mouseUp。或者两者的结合。甚至在某些情况下我们必须重试点击。

(此外,除非单击链接/按钮导致整个页面加载,否则 WaitForPageToLoad 会导致问题,因为它等待页面加载事件。Here's how I ended up waiting for Ajax calls to finish,但是您应该能够提出@987654322 @如果你只使用 JQuery)

【讨论】:

  • 谢谢,我先试试mouseOver + click。我的哪个定位器最好/或我如何判断定位器找到了超链接?我已经有自定义 ajaxStart/ajaxStop, (stackoverflow.com/questions/2878533/…) 所以我应该可以修改它来尝试你的计数器解决方案。
  • mouseOver + click 没有帮助,但我不知道它是否正在定位元素:我使用了 id=btnRun。
  • 奇怪... IsElementPresent("btnRun") 返回真吗?此外,说起来可能太明显了,但请确保页面上没有任何重复的 ID,即使它们是隐藏的。您甚至可以尝试不同的语法。比如“css=div#buttons a#btnRun”什么的。
  • 我添加了Assert.That(selenium_local.IsElementPresent("id=btnRun"), Is.True); 并且它没有失败断言,所以它必须在那里?只有一项具有该 ID。
  • 这很奇怪。而且它不会在点击时引发异常?我猜这是您的 jquery 的问题,我认为我不会对此有太大帮助。我会尝试弄乱 jquery 代码,看看我是否可以让它在做其他事情时工作。
【解决方案2】:

一些 JavaScript 库将鼠标向上事件响应为指示“单击”。如果是这样,MouseDown() 后跟 MouseUp() 应该可以完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2020-06-24
    • 1970-01-01
    • 2020-09-22
    • 2014-02-16
    • 2016-05-08
    相关资源
    最近更新 更多