使用Selenium在C#中断言Javascript值

时间:2013-05-14 11:24:51

标签: c# selenium nunit web-testing

我正在为webapp编写测试。在应用程序的某一点上,使用Javascript完成网页。 为了测试我正在使用带有NUnitSelenium的Visual Studio 2012。 我想检查id=j_idt13:JNumber的框是否包含sometext的文本值。

IJavaScriptExecutor js = driver as IJavaScriptExecutor;
string valoare = (string)js.ExecuteScript("return $('#j_idt13\\:JNumber').val();");
Assert.IsTrue(valoare.Equals("sometext"));

我一直收到这个错误:

  

“语法错误,无法识别的表达式:unsupported pseudo:JNumber”。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我知道你有一些有用的东西,但我想提醒你不要使用JavaScript来获取元素的值,事实上一般来说,在做测试时应该避免,除非没有别的办法做你想做的事。原因是Selenium应该像普通用户那样行事。典型用户不会在页面中键入JavaScript或直接与其进行交互。这对于使用jQuery来说是额外的,因为您的测试不应该假设jQuery存在于页面上并且正在运行。 Selenium本身提供了获取字段值的功能,因此我建议您将代码重写为:

driver.FindElement(By.Id("j_idt13:JNumber")).GetAttribute("value");

答案 1 :(得分:0)

经过一些反复试验后,我发现了一些有效的方法:

string valoare = (string)js.ExecuteScript("return document.getElementById('j_idt13\\:JNumber').value;");

为什么它有效,我不知道。基本上是同一个命令。 jQuery正在使用其他命令,而不是我先尝试过的命令。