【问题标题】:selenium testing in c# UnexpectedJavaScriptErrorc# UnexpectedJavaScriptError 中的硒测试
【发布时间】:2012-04-21 13:31:54
【问题描述】:

我想找一个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'");
}

谢谢

【问题讨论】:

  • 也许没有id为UserName的元素?

标签: c# javascript selenium


【解决方案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 可能更有意义,但您尝试做的事情应该在完美的场景中工作。

【讨论】:

    【解决方案2】:

    您无法使用 selenium webdriver 访问 DOM。您可以使用下面的代码 sn-p

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

    【讨论】:

    • 抱歉,这是不正确的 :( 您可以使用 JavaScript 获取 DOM 元素并将它们返回给 Selenium。Selenium 然后使用其 IWebElement 接口包装或抽象它们。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 2015-07-06
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多