2012-07-05 76 views
42

WebDriver的selenium.focus()等效什麼?使用Java在Selenium WebDriver中集中元素的正確方法

element.sendKeys(""); 

new Actions(driver).moveToElement(element).perform(); 

我已經試過他們與他們的工作,但一個總是在所有元素上工作?

哪一個是任何元素(如按鈕,鏈接等)的正確方法?這對我來說很重要,因爲該功能將用於不同的用戶界面。

回答

44

下面的代碼 -

element.sendKeys("");

試圖找到一個輸入標籤框輸入一些信息,而

new Actions(driver).moveToElement(element).perform();

是比較合適的,因爲它會爲圖像元素的工作,鏈接元素,下拉框等。

因此使用moveToElement()方法更適用於關注網頁上的任何通用WebElement。

對於輸入框,您將必須單擊()上的要關注的元素。

new Actions(driver).moveToElement(element).click().perform();

而鏈接和圖片鼠標將超過特定的元素,你可以根據你想要做什麼決定點擊()就可以了。

如果點擊()上的輸入標籤不起作用 -

既然你要這個功能是通用的,你先檢查webElement是輸入標籤或不 -

if("input".equals(element.getTagName()){ 
    element.sendKeys(""); 
} 
else{ 
    new Actions(driver).moveToElement(element).perform(); 

} 

您可以根據自己的喜好進行類似的更改。

+0

它也適用於輸入框嗎? – questions

+0

讓我知道我編輯的答案是否有幫助? –

+0

這應該工作。謝謝哥們! :) – questions

11

您可以使用JS如下:

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor jse = (JavascriptExecutor) driver; 
jse.executeScript("document.getElementById('elementid').focus();"); 
1

FWIW,我有什麼,我認爲是相關問題的和一個解決辦法想出了:我寫了一個Chrome擴展是做了一個document.execCommand(「貼')放到一個textarea中,重點放在窗口卸載上,以便用系統剪貼板內容填充元素。這可以手動完成100%的工作,但execCommand在Selenium下運行時幾乎總是返回false。

我在最初的driver.get(myChromeExtensionURL)之後添加了一個driver.refresh(),現在它在100%的時間內工作。這是在Mac OS 10.9上的Selenium驅動程序版本2.16.333243和Chrome版本43。

當我研究這個問題時,我沒有看到這個解決方法的任何提及,所以我想我會將我的發現記錄在我的Selenium/focus/execCommand('paste')腳步中。

1

焦點僅集中在窗口的功能。

使用((JavascriptExecutor)webDriver).executeScript("window.focus();");是肯定的。

相關問題