Невозможно нажать на кнопку входа, чтобы перейти на следующую страницу, используя phantomjs с Python selenium - PullRequest
0 голосов
/ 06 июля 2018

Я не могу получить нажатие на кнопку с помощью phantomjs в тестовых случаях python selenium.

вот код, который я использую в файле Python:

btn_log = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id = ('login_button')]")))
driver.execute_script("arguments[0].click();", btn_log)

Это кнопка входа в систему, но она не нажимается, и после входа в нее ничего не меняется.

<button href="#" class="btn btn-red btn-login" id="login_button">Login</button>

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

для этого HTML:

<button href="#" class="btn btn-red btn-login" id="login_button">Login</button>

Питон + Селен :

btn_log = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, 'login_button')))
btn_log.click() 

Обратите внимание, что этот код будет работать, только если ID уникален.

Объяснение :

Понятно, <button href="#", href не имеет никакого значения, поэтому, по моему мнению, даже если вы нажмете, ничего не произойдет.

0 голосов
/ 06 июля 2018

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

  • CSS_SELECTOR:

    WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#login_button"))).click()
    
  • XPATH

    WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='login_button']"))).click()
    

Примечание :

  • Вы должны добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • При использовании CSS_SELECTOR или XPATH всегда лучше создать их с помощью <tagName> и минимум двух атрибутов из class , id или другие


Обновление

В соответствии с HTML, который вы обновили в вопросе, вы можете использовать любое из следующих решений:

  • CSS_SELECTOR

    WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-red.btn-login#login_button"))).click()
    
  • XPATH:

    WebDriverWait(browser, timeout).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-red btn-login' and @id='login_button'][contains(.,'Login')]"))).click()
    

Примечание :

  • Вы должны добавить следующий импорт:

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