2012-07-05 13 views
42

Qual è l'equivalente di selenium.focus() per WebDriver?Modo corretto per focalizzare un elemento in Selenium WebDriver utilizzando Java

element.sendKeys(""); 

o

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

Ho provato sia di loro e lavorato, ma quale sarebbe sempre lavorare su tutti gli elementi?

Quale è il modo corretto per qualsiasi elemento (come pulsante, collegamento ecc.)? Questo è importante per me perché la funzione verrà utilizzata su diverse UI.

risposta

44

Il seguente codice -

element.sendKeys("");

cerca di trovare una casella di tag input di inserire alcune informazioni, mentre

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

è più appropriato, come si lavorerà per elementi di immagine, elementi di collegamento, caselle a discesa ecc.

Pertanto utilizzando metodo moveToElement() ha più senso concentrarsi su qualsiasi WebElement generico sulla pagina web.

Per una casella di input è necessario fare clic su() sull'elemento da mettere a fuoco.

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

mentre per i collegamenti e le immagini il mouse sarà su quel particolare elemento, si può decidere di fare clic() su di esso a seconda di cosa si vuole fare.

Se il clic() su un tag input non funziona -

Dal momento che si desidera che questa funzione sia generica, in primo luogo verificare se il webElement è un tag di ingresso o no da -

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

} 

È possibile apportare modifiche simili in base alle proprie preferenze.

+0

Funziona anche per le caselle di input? – questions

+0

Fammi sapere se la mia risposta modificata è utile? –

+0

Questo dovrebbe funzionare. Grazie compagno! :) – questions

11

È possibile utilizzare JS come di seguito:

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

FWIW, ho avuto quello che penso è un problema correlato e si avvicinò con una soluzione: ho scritto un'estensione Chrome che ha fatto un Document.ExecCommand ('paste ') in una textarea focalizzata sulla finestra di scarico per popolare l'elemento con il contenuto degli appunti di sistema. Questo ha funzionato al 100% del tempo manualmente, ma execCommand ha restituito false quasi tutto il tempo durante l'esecuzione in Selenium.

Ho aggiunto un driver.refresh() dopo il driver.get iniziale (myChromeExtensionURL) e ora funziona al 100% del tempo. Questo era con la versione del driver Selenium 2.16.333243 e la versione 43 di Chrome su Mac OS 10.9.

Quando stavo ricercando il problema, non ho visto alcuna menzione di questa soluzione alternativa, quindi ho pensato di documentare la mia scoperta per quelli che seguono nelle mie orme di Selenium/focus/execCommand ("incolla").

1

La messa a fuoco funziona solo se la finestra è a fuoco.

Utilizzare ((JavascriptExecutor)webDriver).executeScript("window.focus();"); per essere sicuro.