我无法在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_SELECTOR
或XPATH
时,最好借助类,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