无法点击登录按钮,移动到下一页,使用带有Python selenium的phantomjs



我无法在python硒测试用例中使用phantomjs单击按钮。

这是我在 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>

对于这个 HTML

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

Python+Selenium

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

请注意,仅当ID是唯一时,此代码才有效。

解释

我看到<button href="#",href没有任何价值,所以在我看来,即使你点击,也不应该发生任何事情。

根据您共享的 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_SELECTORXPATH时,最好借助类,id或其他属性中的<tagName>和至少两个属性来构造它们


更新

根据您在问题中更新的 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
    

最新更新