Питон с селеном: невозможно найти элемент - PullRequest
0 голосов
/ 04 декабря 2018

Я пытался найти следующий элемент:

<input type="text" ng-change="vm.refreshTimeline()" button-enter="vm.filterRowChange();" ng-model="vm.filterRowValue" class="ng-pristine ng-untouched ng-valid ng-empty">

Это поле поиска .

Я пытался использовать имя класса, xpath, cssселектор, но ни один из них не работает.Тем не менее я получаю « Невозможно найти элемент » с соответствующими атрибутами.

driver.find_element_by_css_selector('body > div:nth-child(1) > div.uiview.ng-scope > div.container.asset-details.ng-scope > div.row.top-buffer > div > div.GanttController > div.input-append.text-center.search_section.ng-scope > input')

driver.find_element_by_class_name('ng-pristine ng-untouched ng-valid ng-empty')

  find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[4]/div/div[2]/div[1]/input')

find_element_by_link_text('Search by Equipment ID or S/N')

Я даже пытался использовать xpath helper, чтобы узнать точный xpath, но он показывает ошибкуas:

[INVALID XPATH EXPRESSION]

Помогите мне решить эту проблему.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Позволяет установить неявное время ожидания:

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

Может потребоваться слишком много времени, чтобы выполнить все, и нужно подождать, чтобы гарантировать все элементы.

Для получения дополнительной информации: Время ожидания Selenium

0 голосов
/ 04 декабря 2018

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

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

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-untouched.ng-valid.ng-empty[ng-change*='refreshTimeline']")))
    
  • Использование XPATH:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-pristine ng-untouched ng-valid ng-empty' and contains(@ng-change,'refreshTimeline')]")))
    
  • Примечание : необходимо добавить следующие операции импорта:

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