背景
使用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
时会激发焦点吗?
答案 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"));
断言失败,告诉我没有设置焦点。