Как найти элемент span, используя Selenium и Python - PullRequest
0 голосов
/ 03 мая 2019

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

<span class="btn btn-default" onclick="close_terms_window();" style="" xpath="1">Next</span>

, используя селен вебдрайвер.Но я получаю это сообщение:

Сообщение: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// div [@ id = 'Terms-modal '] / div // [@ id =' acceptterms '] // [@ onclick = "close_terms_window ();"] "} (информация о сеансе: chrome = 74.0.3729.131) (информация о драйвере: chromedriver = 2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1), платформа = Windows NT 10.0.17134 x86_64)

Я использовал следующие методы:

Метод 1:

time.sleep(4) 
element_term = driver.find_element_by_xpath("//div[@id='terms-modal']/div//* [@id='acceptterms']//span[@onclick=\"close_terms_window();\"]")

Метод 2:

element_term = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(@class,'btn') and contains(@class,'btn-default)]")))`

Метод 3:

time.sleep(1)
element_term = driver.find_element_by_xpath("//div[@id='terms-modal']/div//*[@id='acceptterms']//*[@onclick=\"close_terms_window();\"]")

Метод 4:

Использование селектора CSS:

time.sleep(4)
driver.find_element_by_css_selector("span.btn btn-default")
element_term = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(@class,'btn') and contains(@class,'btn-default)]")))

Снимок исходного кода: https://i.stack.imgur.com/tib3V.png

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

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

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

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.btn.btn-default[onclick^='close_terms_window']")))
    
  • Использование XPATH:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='btn btn-default' and starts-with(@onclick,'close_terms_window')][contains(., 'Next')]")))
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 03 мая 2019
from selenium.webdriver.support import expected_conditions as EC


WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='btn btn-default')))

Ожидаемые условия:

Это некоторые общие условия, которые часто используются при автоматизации веб-приложений.

Привязка Selenium Python предоставляет несколько удобных методов, поэтому вам не нужно самостоятельно кодировать класс Ожидаемые условия или создавать для них собственный пакет утилит.

  • title_is
  • title_contains
  • presence_of_element_located
  • visibility_of_element_located
  • visibility_of
  • presence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...