c#UnexpectedJavaScriptError中的selenium测试

时间:2012-04-09 04:06:19

标签: c# javascript selenium

我想找一个textbox id= UserName并给它一个value =sa

我的测试有问题。

错误显示UnexpectedJavaScriptError

发生了什么事?我该如何解决这个问题?

这是我的代码。

public void SetupTest()
{

    driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 30));
    driver.Navigate().GoToUrl(**the WEBSITE url**);

}

public void Test1()
{

    IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
    js.ExecuteScript("document.getElementById('UserName').value='sa'");
}

感谢

2 个答案:

答案 0 :(得分:1)

我在我的日常工作中使用Selenium,这种代码应该可以正常工作。 我认为问题可能是当你试图使用它时元素不存在。

我的建议是尝试这样的事情:

try {
  var element = document.getElementById('UserName');
  if(element) {
     element.value = 'sa';
  }
} catch(e) {}

我实际上在我们的selenium代码中有一个“jquery”辅助方法,它使用jQuery查找元素,然后返回[0]元素,以便我们可以将它与Selenium API一起使用。

    private IWebElement GetFirstElement()
    {
        return (IWebElement)((IJavaScriptExecutor)_driver).ExecuteScript("return $(\"" + _selector + "\")[0];", null);
    }

此外,您可能只需要等到元素出现在屏幕上。 一个简单的方法是使用Selenium的FindElement(By ...),因为Selenium会等待一段可配置的时间让元素出现。

如果你这样做,在这种情况下完全避免使用JavaScript可能更有意义,但是你要做的事情应该在一个完美的场景中工作。

答案 1 :(得分:-1)

您无法使用selenium webdriver访问DOM。您可以使用以下代码段

来实现相同的功能,而不是使用javascript
string text = "sa";
IWebElement element =  driver.FindElement(By.Id("UserName"));
element.SendKeys(text);