在使用jQuery定位元素时,Selenium Webdriver是否会更加关注元素?

时间:2012-07-19 17:38:43

标签: c# jquery webdriver selenium-webdriver

背景

使用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时会激发焦点吗?

1 个答案:

答案 0 :(得分:2)

我不相信,这是我设置测试的测试:

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

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

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

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

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"));

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