Python中的Selenium如果元素不存在,如何使用If - else代码

时间:2016-08-25 13:54:01

标签: python selenium

所有,我需要一些认真的"愚蠢的#34;如何在Python中编写代码的示例,如果元素存在或不存在则会执行某些操作。我是编程的新手,我已经回顾了一天的帖子,我似乎无法弄明白....

这是我想要做的。

from selenium.common.exceptions import NoSuchElementException, staleElementReferenceException

    elem = driver.find_element_by_partial_link_text('Create Activity')

    print("Searching for Create Activity.")

    if elem.is_displayed():
        elem.click() # this will click the element if it is there
        print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!")
    else: 
        print ("NO LINK FOUND")

所以,假设存在一个LINK,即element_by_partial_link_text('创建活动')

我得到了正确的答复...... 搜索创建活动。 发现链接创造活动!并点击它!

我的问题是没有匹配element_by_partial_link_text('Create Activity')

的链接

我没有得到我在其他声明中所期望的东西。  print ("NO LINK FOUND")

我明白了......

  

追踪(最近一次通话):         文件"",第1行,in         在find_element_by_partial_link_text中的文件" C:\ Program Files(x86)\ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py",第341行           return self.find_element(by = By.PARTIAL_LINK_TEXT,value = link_text)         文件" C:\ Program Files(x86)\ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py",第745行,在find_element中           {'使用':by,' value&#39 ;: value})['价值']         文件" C:\ Program Files(x86)\ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py",第236行,执行           self.error_handler.check_response(响应)         文件" C:\ Program Files(x86)\ Python35-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py",第194行,在check_response中           提出exception_class(消息,屏幕,堆栈跟踪)       selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"方法":"部分链接文本","选择器":& #34;创建活动"}

如何在Python中获取selenium以将此异常或错误转为不停止我的脚本并只处理ELSE语句。

谢谢,

3 个答案:

答案 0 :(得分:9)

你可以捕捉异常并采取相应的行动:

try:
    elem = driver.find_element_by_partial_link_text('Create Activity')
    if elem.is_displayed():
        elem.click() # this will click the element if it is there
        print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!")
except NoSuchElementException:
    print("...")

另外,我可能会修改测试以确保元素确实可以点击":

if elem.is_displayed() and elem.is_enabled():

答案 1 :(得分:5)

find_element返回元素或抛出NoSuchElementException,因此,为了确定元素是否存在if条件的最佳方法,您应该尝试使用find_elements而不是捕获异常,因为它' s返回WebElement列表或空列表,因此您只需检查其长度如下: -

elems = driver.find_elements_by_partial_link_text('Create Activity')

if len(elems) > 0 and elems[0].is_displayed():
    elems[0].click()
    print("FOUND THE LINK CREATE ACTIVITY! and Clicked it!")
else: 
    print ("NO LINK FOUND")

答案 2 :(得分:0)

比try / except更简单就是使用find_elements()。如果不存在,则返回空列表。如果不是空的,首先找到碰撞:找到[0] .click()