Ho cercato di trovare una soluzione a questa cosa e ho trascorso molto tempo, ma è quasi impossibile per me farlo.Selenium/Firefox: il comando ".click()" non funziona con un elemento trovato
La questione: sto usando Selenium con Java in Firefox. Devo trovare un elemento (una listbox) e cliccarci sopra. Quindi, il codice trova l'elemento, ma l'azione di clic non funziona. Funziona bene in Google Chrome ogni volta, e qualche volta in Firefox (con lo stesso codice Java a volte funziona, ea volte no).
C'è la parte di codice con l'elemento quando il programma entra nella pagina:
<div id="size-btn" class="size-btn">
<span class="selected-size">SELECCIONA TALLA </span>
<div class="size-select" style="display: none;">
<table>
<tbody>
<tr id="selecsize_2" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051607">
<tr id="selecsize_3" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051608">
<tr id="selecsize_4" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051609">
<tr id="selecsize_5" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051610">
</tbody>
</table>
<button class="size-guide gaViewEvent gaTrack" data-ga-props="{action:'Seleccionar_Talla', opt_label:'Guia_de_tallas'}" data-href="http://www.anyweb.com/webapp/wcs/stores/servlet/ProductGuideSizeAjaxView?catalogId=24052&categoryId=358056&langId=-5&productId=1047599&storeId=10701">Guía de tallas</button>
</div>
</div>
E c'è la parte di codice che cambia quando l'elemento viene cliccato:
<div id="size-btn" class="size-btn opened">
Ho provato molte soluzioni e talvolta funziona, ma la volta successiva che eseguo il programma, non funziona di nuovo.
Alcune soluzioni:
che trova l'elemento, ma non viene eseguito fare clic su azione. Ho controllato con xpath e cssSelector, e ci sono elementi unici trovati con quelle espressioni.
driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")).click(); // Also checked with By.cssSelector("span.selected-size")
ho anche se era a causa del tempo, così ho cercato di risolvere in questo modo.
WebElement we = driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")); // By.cssSelector("span.selected-size") Thread.sleep(3000); we.click();
Infine, ero un po 'disperata, e ho creato una nuova funzione per cercare di fare questo quasi 60 volte, alla ricerca del cambiamento sul codice elemento e se c'era alcun cambiamento, solo cercato di fai di nuovo clic sull'azione.
clickAndWaitWhileElementIsNotPresent(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span"),By.xpath("//div[@class='size-btn opened']/span")); // By.cssSelector("span.selected-size") private void clickAndWaitWhileElementIsNotPresent(By by1, By by2) throws Exception { for (int second = 0;; second++) { if (second >= 60) fail("timeout"); try { if (isElementPresent(by2)) { break; } else { driver.findElement(by1).click(); } } catch (Exception e) { } Thread.sleep(1000); } }
Ci sono le immagini dell'elemento:
Qualcuno sa come fare?
È necessario chiarire cosa significa "non funziona". C'è un'eccezione o qual è il comportamento imprevisto? –
Con "non funziona", intendo che il comportamento previsto del pulsante non è corretto, quando fa clic sul pulsante, l'elenco a discesa dovrebbe essere aperto. Grazie. – ovejaexiste
ha avuto un problema simile con i dropdown di select2; 'click' non funzionerebbe in firefox quando provate a fare clic su div-risolto facendo clic sul tag anchor iniettato da select2 –