Python / Selenium中的ElementNotVisibleException错误

时间:2017-01-16 22:38:46

标签: python selenium

运行此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()

我没有收到错误。

3 个答案:

答案 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('')"
    )