0

背景:

一直在使用 Selenium 2.0 (WebDriver),并了解在定位元素时焦点会移动到元素上,如下所示:

var element = driver.FindElement(By.CssSelector("#foo"));
element.Click();

我也知道如果 jQuery 在被测页面上,我们可以做一些强大的事情(太酷了):

IJavaScriptExecutor scriptExecutor = ((IJavascriptExecutor)driver);
scriptExecutor.ExecuteScript("$('#foo')[0].click();";
IWebElement hiddenElement = scriptExecutor.ExecuteScript("return $('#my_dynamic_element')[0]");
hiddenElement.Click;   // found ya!

问题:

Selenium 的 WebDriver(特别是 .NET 风格)在将.ExecuteScript()结果转换为IWebElement.

4

1 回答 1

2

我不这么认为,这是我设置的一个测试:

我创建了以下 html 页面,其中包含一个脚本,该脚本将在元素获得焦点时更改类名:

<script>
  function ChangeClass(theName, theClass)
  {
      document.getElementById(theName).className=theClass;
  }
</script>
<input type="text" class="notFocused" onfocus="ChangeClass('textfieldOne', 'focused');"    id="textfieldOne" />

当该字段获得焦点时,它将更改类名。

然后,我可以运行以下 WebDriver 测试,该测试使用 IJavaScriptExecutor 检索元素,然后检查类名是否已更改以指示该元素已获得焦点:

IWebDriver webDriver = new ChromeDriver();
webDriver.Navigate().GoToUrl("test.html");

IJavaScriptExecutor scriptExecutor = (IJavaScriptExecutor)webDriver;
IWebElement element = (IWebElement)scriptExecutor.ExecuteScript("return document.getElementById('textfieldOne');");

Assert.AreEqual("focused", element.GetAttribute("class"));

断言失败,这告诉我没有设置焦点。

于 2012-07-19T21:12:22.210 回答