NoSuchElementException: не удалось щелкнуть элемент div - PullRequest
0 голосов
/ 17 апреля 2020
<td role="presentation" valign="top" class=" x-trigger-cell x-unselectable" style="width:28px;" id="ext-gen1147">
<div class="x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded" role="presentation" id="ext-gen1146">
</div></td>

я пытаюсь щелкнуть этот элемент div, но выбрасываю исключение. Мой код:

driver.find_element_by_xpath("//div[@id='ext-gen1146']").click()
driver.find_element_by_xpath("//*[@id='ext-gen1147']").click()
driver.find_element_by_xpath("//div[@class='x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded' and @id='ext-gen1146']")

selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: Невозможно найти элемент : {"method": "xpath", "selector": "// * [@ id = 'ext-gen1147']"} (информация о сеансе: chrome = 80.0.3987.163)

enter image description here

Ответы [ 4 ]

0 голосов
/ 18 апреля 2020

вы можете попробовать класс Actions, чтобы нажать на ожидаемый элемент -

Actions actions = new Actions(driver);
actions.click(element).build().perform();

, если это также не работает, попробуйте использовать JavascriptExecutor

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor..executeScript("arguments[0].click();", element);
0 голосов
/ 17 апреля 2020

Я думаю, может быть, вам нужно сначала дождаться видимости, может быть, это поможет вам { ссылка } ... например:

WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<"ext-gen1146>));
0 голосов
/ 17 апреля 2020

Чтобы щелкнуть по элементу Dynami c Induce WebDriverWait () и element_to_be_clickable () и далее css selector.

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.rp-icon-expanded[id^='ext-gen'][role='presentation']"))).click()

Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 17 апреля 2020

Попробуйте приведенное ниже решение и убедитесь, что ваш элемент не является динамическим c и его нет внутри iframe. Если он внутри iframe, то вам нужно переключиться на него и затем щелкнуть по элементу.

wait.until(EC.element_to_be_clickable((By.ID, "ext-gen1147"))).click()

или

wait.until(EC.element_to_be_clickable((By.XPATH, "x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded"))).click()

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

Чтобы перейти на iframe, вы можете использовать ниже код, убедитесь, что у вас есть только один iframe или вы можете использовать идентификатор / имя iframe для определения правильного элемента перед переключением:

 iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, 'iframe')))
 driver.switch_to.frame(iframe)
...