2012-07-19 69 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