Python Selenium is_displayed()返回true并且仍然引发了ElementNotVisible异常?

时间:2013-07-02 18:01:50

标签: python selenium

在调用任何元素的send_keys()之前,我首先检查它是否已启用且可见,因此它不会引发异常。

is_Displayed会返回True,当我尝试将send_keys发送到该元素时,它仍然会引发ElementNotVisible的异常。这是某种形式的错误吗?

它适用于某些网站,但不适用于其他网站。

def login():
 elem = browser.find_elements_by_xpath('//input[contains(@name, "user")]')
 for elements in elem:
  if elements.is_displayed():
   if elements.is_enabled():
    elements.send_keys(username)
    elem = browser.find_elements_by_xpath('//input[contains(@name, "pass")]')
    for elements in elem:
     if elements.is_displayed():
       if elements.is_enabled():
        elements.clear()
        elements.send_keys(password + Keys.RETURN)   #Crashes here
        time.sleep(4)
        return

3 个答案:

答案 0 :(得分:3)

试试这个:

def login():
 user_elements = browser.find_elements_by_xpath('//input[contains(@name, "user")]')
 for user in user_elements:
  if user.is_displayed():
   if user.is_enabled():
    user.send_keys(username)
    pass_elements = browser.find_elements_by_xpath('//input[contains(@name, "pass")]')
    for passw in pass_elements:
     if passw.is_displayed():
       if passw.is_enabled():
        passw.clear()
        passw.send_keys(password + Keys.RETURN)   #Crashes here
        time.sleep(4)
        return

您可能选择的变量名称会使内部循环破坏外部循环。

答案 1 :(得分:1)

如果有人仍然想知道是什么问题,那么这是由页面完全加载后的javascript隐藏元素引起的。

完全禁用页面上的javascript解决了这个问题。

答案 2 :(得分:-1)

请使用我的代码,我的github https://github.com/big-vl/isdisplayed_selenium/blob/master/isDisplayed.py

def isDisplayed():
    try:
        browser.find_element_by_xpath("//*[text()='find text vwhis in page']")
    except NoSuchElementException:
        return False
    return True

    #use function

if (isDisplayed() == True):
    print('text find, pleas replace hash tag or replace xpatch')
else:
    print('not found text, my style php/python *smile*')