2012-07-19 73 views
0

背景:使用jQuery来定位元素时,SeleniumWebdrive是否将焦点放在元素上?

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

回答

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

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

+0

不错的做法。当您提供多个输入字段时,您的测试会发生什么情况(某些浏览器不会自动将焦点附加到加载时的第一个输入)? – 2012-07-20 14:06:17

+0

在使用多个文本字段进行测试时,我没有看到任何更改。您可以添加一个额外的文本字段,然后更新webdriver代码以返回第二个文本字段,但它仍然没有被选为焦点。 – PocketDews 2012-07-20 14:37:24