Python селен не может найти элемент даже с ожиданием - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь отправить текст в поле ввода, но селен не может найти элемент.

element = WebDriverWait(b, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/table/tbody/tr[1]/td/form/div/table/tbody/tr[2]/td/table[2]/tbody/tr/td[4]/table/tbody/tr/td[1]/input')))
element.send_keys("Customer Care", Keys.ENTER)

Я пытался использовать XPATH, полный XPATH и идентификатор, чтобы найти его, но он продолжает выдавать мне ошибку, которая указывает, что он не может найти элемент selenium.common.exceptions.TimeoutException

Фрагмент HTML элемента

<input class="iceInpTxt testBox" id="headerForm:jumpto" maxlength="40" name="headerForm:jumpto" onblur="setFocus('');iceSubmitPartial(form, this, event);" onfocus="setFocus(this.id);" onkeyup="iceSubmit(form,this,event);" onmousedown="this.focus();" type="text" value="">

Ответы [ 3 ]

1 голос
/ 23 января 2020

Элемент имеет ID, используйте его как локатор. Проверьте, находится ли элемент внутри iframe:

wait = WebDriverWait(b, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'headerForm:jumpto')))
element.send_keys("Customer Care", Keys.ENTER)

Как перейти на iframe:

wait = WebDriverWait(b, 10)

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe_locator")))

element = wait.until(EC.element_to_be_clickable((By.ID, 'headerForm:jumpto')))
element.send_keys("Customer Care", Keys.ENTER)

# How to go back to default content
b.switch_to.default_content()
0 голосов
/ 23 января 2020

это хорошая идея, чтобы проверить, установлены ли вы и импортированы селен или другие необходимые пакеты. Используйте pip, чтобы проверить свою версию и посмотреть, есть ли ошибка онлайн. Пожалуйста, дайте мне знать, какую python версию вы используете. Возможно, указанный вами XPATH был неверным, или, возможно, попробуйте увеличить количество времени во втором параметре WebDriverWait(1st,2nd). Было бы гораздо полезнее, если бы у вас была ссылка на эту страницу html, чтобы я мог проверить вашу XPATH. Если вам нужна дополнительная помощь, предоставьте страницу html.

Редактировать: это то, что необходимо воспроизвести, чтобы его можно было проверить. Если вы попробовали описанное выше, я не смогу помочь, если не увижу документ html. Вы должны удалить всю конфиденциальную информацию, прежде чем делиться ею. Другие элементы вашего кода кажутся правильными.

0 голосов
/ 23 января 2020

Если в вашем сценарии использования используется click() или send_keys() при вызове WebDriverWait вместо presence_of_element_located(), вам нужно использовать Ожидаемые_условия как element_to_be_clickable() следующим образом:

Таким образом, вы можете эффективно использовать любую из следующих Стратегий локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(b, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.iceInpTxt.testBox[id^='headerForm'][name$='jumpto']"))).send_keys("Customer Care", Keys.ENTER)
    
  • Использование XPATH:

    WebDriverWait(b, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='iceInpTxt testBox' and @id='headerForm:jumpto'][@name='headerForm:jumpto']"))).send_keys("Customer Care", Keys.ENTER)
    

Ссылки

Вы можете найти несколько подробных обсуждений о различные ожидаемые условия в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...