使用Selenium在c#中断言Javascript值

本文关键字:断言 Javascript 中断 Selenium 使用 | 更新日期: 2023-09-27 18:13:41

我正在为一个web应用程序写一个测试。在应用程序的某一点上,使用Javascript完成了网页。为了测试,我使用Visual Studio 2012与NUnitSelenium。我想检查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"));

我一直得到这个错误:

"语法错误,无法识别的表达式:不支持的pseudo:JNumber".

我在这里错过了什么?

使用Selenium在c#中断言Javascript值

我知道你有一些工作,但我想提醒你避免使用JavaScript来获取元素的值,事实上,在一般情况下,它应该避免做你的测试,除非当没有其他的方法来做你想做的事情。原因是Selenium的行为应该与典型用户一样。一般用户不会在页面中键入JavaScript,也不会直接与之交互。这对于使用jQuery来说是额外的,因为您的测试不应该假设页面上存在jQuery并且正在运行。Selenium本身提供了获取字段值的能力,因此我建议您将代码重写为如下内容:

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

经过反复试验,我发现了一些可行的方法:

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

我不知道为什么它会起作用。基本上是同一个命令。jQuery也可以与其他命令一起工作,只是不是我第一次尝试的那个。