Селен не найдет элемент ни одним методом - PullRequest
0 голосов
/ 23 апреля 2019

У меня проблемы с селеном, чтобы найти элемент на веб-сайте (чтобы быть точным). В идеале я хотел бы, чтобы драйвер отправлял ключи в поле ввода, но селен по какой-то причине не может их найти.

Я уже пытался найти по ID, Xpath и по имени. Любые предложения о том, как найти этот элемент?

Вот HTML:

<input
  id="contestant[name]"
  name="name"
  ng-model-options="{ debounce: 300 }"
  ng-model="contestantState.form.name"
  ng-pattern=".*"
  placeholder="Alice Smith" required=""
  style="width: 246px"
  type="text"
  class="ng-empty
  ng-invalid
  ng-invalid-required
  ng-valid-pattern
  ng-dirty
  ng-valid-parse
  ng-touched"
>

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

Попробуйте один из этих

By.CssSelector("[id*='contestant']")

By.CssSelector("[ng-model='contestantState.form.name']")

By.CssSelector("[name='name']")
0 голосов
/ 24 апреля 2019

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

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

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-empty.ng-invalid.ng-invalid-required.ng-valid-pattern.ng-dirty.ng-valid-parse.ng-touched[id=\"contestant[name]\"]"))).send_keys("ml2017")
    
  • Использование XPATH:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-dirty ng-valid-parse ng-touched' and @id=\"contestant[name]\"]"))).send_keys("ml2017")
    
0 голосов
/ 23 апреля 2019

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

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

inputelement=WebDriverWait(driver,40).until(expected_conditions.element_to_be_clickable((By.ID,'contestant[name]')))
inputelement.send_keys("Apple")
...