Я попытался найти решение этой проблемы, и я потратил много времени, но мне почти невозможно это сделать.Selenium/Firefox: команда «.click()» не работает с найденным элементом
Вопрос: Я использую Selenium с Java в Firefox. Мне нужно найти элемент (список) и нажать на него. Таким образом, код находит элемент, но действие click не работает. Он отлично работает в Google Chrome каждый раз, и иногда иногда в Firefox (с тем же кодом Java иногда работает, а иногда и нет).
Существует часть кода с элементом, когда программа переходит на странице:
<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>
И есть часть кода, который меняется при нажатии на элемент:
<div id="size-btn" class="size-btn opened">
Я пробовал много решений, и иногда это работает, но в следующий раз, когда я запускаю программу, она не работает снова.
Некоторые решения:
Он находит элемент, но не запускается кликом. Я проверил с xpath и cssSelector, и есть уникальные элементы, найденные с этими выражениями.
driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")).click(); // Also checked with By.cssSelector("span.selected-size")
Я, хотя это было из-за времени, поэтому я попытался решить его таким образом.
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();
Наконец, я был немного отчаянным, и я создал новую функцию, чтобы попытаться сделать это почти 60 раз, ища изменения в коде элемента и если есть какие-либо изменения, просто пытался снова нажмите действие.
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); } }
Есть образы элемента:
Кто-нибудь знает, как сделать это?
Необходимо уточнить, что означает «оно не работает». Есть ли исключение или какое неожиданное поведение? –
Поскольку «это не работает», я имею в виду, что ожидаемое поведение кнопки неверно, когда она нажимает на botton, выпадающий список должен быть открытым. Спасибо. – ovejaexiste
имел аналогичную проблему с выпадающими списками select2; «click» не работал бы в firefox при попытке щелкнуть div - разрешен, щелкнув тег привязки, который вводится select2 –