2016-04-19 14 views

risposta

2

Un attento abbinamento della versione in vaso di selenio con la versione di Firefox può risolvere il problema. Il selenio dovrebbe scorrere automaticamente un elemento in vista se non è nella pagina. Costringere un elemento in vista con JavaScript non è necessario.

non vediamo mai questo problema in Firefox 31.5.0 con il selenio-server-standalone-2.44.0.jar, tuttavia quando l'aggiornamento a Firefox 38.7.0 con il selenio-server-standalone-2.52.0. jar, è diventato un problema.

Vedi https://github.com/seleniumhq/selenium/issues/1543

+1

Grazie signore !! Aggiornare chromedriver e abbinare il server standalone con la versione di selenio in gradle lavorato :) – MatMat

1

ActionBuilder in grado di risolvere l'errore. A volte c'è un altro elemento di fronte all'oggetto che deve essere cliccato, quindi un ActionBuilder clicca per la posizione dell'elemento può funzionare nei casi in cui un tradizionale click fallisce

Actions actions = new Actions(driver); 
    actions.moveToElement(clickElement).click().perform(); 

o provare al centro dell'elemento

Actions actions = new Actions(driver); 
    Integer iBottom = clickElement.getSize().height; 
    Integer iRight = clickElement.getSize().width; 
    actions.moveToElement(clickElement, iRight/2, iBottom/2).click().perform(); 
+2

questo è molto fuorviante. spetta al produttore del driver determinare cosa fa effettivamente il clic e dove e come fa clic. hai fonti per mostrare che fa clic su "in alto a sinistra" per impostazione predefinita? in tal caso, quali browser – sircapsalot

+1

True ogni driver potrebbe essere diverso. La mia ipotesi viene dal casting di un webElement ad un Locatable che dà la posizione in alto a sinistra. –

+0

@sircapsalot Non sarei del tutto d'accordo sul fatto che sia "molto fuorviante", dato che ActionBuilder è una soluzione valida all'errore in molti casi ... ma si fa un punto valido sul produttore del driver, forse non sempre predefinito in alto a sinistra angolo. Ho modificato il post di conseguenza. – emery

3

mio stesso problema è risolto da JavaScript, per favore prova seguente codice al posto di selenio clicca

WebElement rateElement = driver.findElement(By.xpath(xpathContenRatingTab)); 
((JavascriptExecutor)driver).executeScript("arguments[0].click();", rateElement); 
+0

Questo ha funzionato per me quando ho provato la maggior parte degli altri suggerimenti senza successo. SendKeys ha funzionato per Chrome ma non per Firefox. Grazie. –

2

Se il problema è che l'elemento è scorrere fuori dallo schermo (e di conseguenza sotto qualcosa di simile a una barra di intestazione), si può provare a scorrere di nuovo in vista in questo modo:

private void scrollToElementAndClick(WebElement element) { 
int yScrollPosition = element.getLocation().getY(); 
js.executeScript("window.scroll(0, " + yScrollPosition + ");"); 
element.click(); } 

se è necessario si potrebbe anche aggiungere un offset statica (se per ad esempio si dispone di un'intestazione di pagina che è 200px alta e visualizzato sempre):

public static final int HEADER_OFFSET = 200; 
private void scrollToElementAndClick(WebElement element) { 
int yScrollPosition = element.getLocation().getY() - HEADER-OFFSET; 
js.executeScript("window.scroll(0, " + yScrollPosition + ");"); 
element.click(); 
} 

è possibile indirizzare clic utilizzando JavascriptExecutor (Non recommanded)

WebElement element= driver.findElement(By."Your Locator")); 

JavascriptExecutor executor = (JavascriptExecutor) driver; 
executor.executeScript("arguments[0].click();", element); 

Spero che vi aiuterà a:)

+0

Questo tipo di risposta è utile, tuttavia Selenium dovrebbe farlo automaticamente, quindi penso che la soluzione migliore sia quella di abbinare le versioni di Firefox e Selenium in modo appropriato. – emery

+0

@ShubhramJain Cosa sono gli argomenti [0] .click() qui perché sto ricevendo questo errore per il codice precedente org.openqa.selenium.WebDriverException: argomenti [0] .click non è una funzione –

+1

Perché non si consiglia di usare ' javascriptExcutor'? – jmreicha

4

Ciò accade nel seguito casi-

  • Quando l'elemento viene caricato nel DOM, ma la posizione non è fissato sull'interfaccia utente. Possono essere caricati completamente altri div o immagini che non sono caricati.

  • La pagina viene aggiornata prima di fare clic sull'elemento.

Soluzione

  • Usa Thread.sleep prima azioni su ogni elemento web nell'interfaccia utente, ma non è una buona idea.
  • Utilizzare WebDriverWait ExpectedConditions.

Ero di fronte allo stesso problema, il tempo di caricamento della pagina era maggiore e un'icona di caricamento si sovrapponeva su tutta la pagina web.

ExpectedConditions WebDriverWait Per risolvere il problema, ho implementato, che attende l'icona di carico a scomparire prima di eseguire l'azione clic su un elemento

chiamare questa funzione prima di eseguire un'azione (sto usando dati quadro guidato)

public void waitForLoader() throws Exception { 
    try { 
    String ObjectArray[]=ObjectReader.getObjectArray("LoadingIcon"); 
    if(checkElementDisplayed(ObjectArray[3],ObjectArray[2])) 
    { 
    WebDriverWait wait = new WebDriverWait(remotewebdriver,10); 
    wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(ObjectArray[3]))); 
    } 
    } catch (NoSuchElementException e) { 
    System.out.println("The page is loaded successfully"); 
    } 
    } 
2

Ho avuto lo stesso problema e l'ho risolto utilizzando determinate funzionalità. Mentre stai usando FirefoxDriver, puoi impostare "overlappingCheckDisabled" su true per risolvere il tuo problema.

capabilities.setCapability("overlappingCheckDisabled", true); 
+0

dopo aver utilizzato diversi modi per fare clic su questo problema, questo solo mi aiuta. –

Problemi correlati