运行此Python / Selenium脚本时出现此错误。
File "./a.py", line 21, in <module>
elem = driver.find_element_by_id("licensees").click()
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message:
这是html代码
<p>
<button onClick="myloginwindow1('')" value="Login Now" name="licensees" id="licensees">
<p>Licensee Login</p>
</button>
</p>
这是代码。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("https://xxxxx.com")
assert "xxxxxxxx" in driver.title
try:
element = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, "licensees"))
)
elem = driver.find_element_by_id("licensees").click()
finally:
driver.quit()
当我删除
elem = driver.find_element_by_id("licensees").click()
我没有收到错误。
答案 0 :(得分:0)
使用visibilityOfElementLocated
代替presence_of_element_located
presenceOfElementLocated
不关心元素是否可见,它只是检查元素是否在页面上
try:
WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.ID, "licensees"))).click()
答案 1 :(得分:0)
如其他地方所述,状态与可见性不同。
但是使用capybara-py,你不必考虑:
from capybara.dsl import page
page.visit("...")
page.assert_title("...")
page.click_button("Licensee Login")
在这里,click_button()
等待按钮可以互动。
(同样地,assert_title()
等待标题匹配,例如,页面需要一段时间才能完全加载。)
答案 2 :(得分:0)
您还可以执行单击按钮时执行的脚本。 这样,您无需等待元素可单击。
driver.execute_script(
"myloginwindow1('')"
)