【问题标题】:Python/Selenium trying to use an "if" statement on an element when not foundPython/Selenium 在未找到时尝试对元素使用“if”语句
【发布时间】:2019-07-25 15:40:45
【问题描述】:

当找不到 xpath 时,我正在尝试使用特定消息引发 ValueError。

@step('Click save')
def step_impl(context):

click_save = 
context.browser.find_element_by_xpath("//button[@class='save_button']")
if not click_save:
   raise ValueError('Save button is not found')
click_save.click()

理想情况下,如果找不到保存按钮,我希望显示引发 ValueError ......但是当找不到 click_save xpath 时,代码将永远不会到达“if”语句。我只会得到一个错误...等等等等 xpath 未找到或不管它是什么。

当在一组测试中你可能有类似的 xpath 并且我想确切地知道哪个失败时,我正在尝试更具体地执行此操作。

这可能吗?

【问题讨论】:

    标签: python python-3.x selenium automation


    【解决方案1】:

    Selenium 找不到元素并抛出错误。您可以检查元素的长度计数,如果它为零,则应该引发错误。

    试试下面的代码。

    if len(browser.find_elements_by_xpath("//button[@class='save_button']"))==0:
       raise ValueError('Save button is not found')
    else:
      click_save = browser.find_element_by_xpath("//button[@class='save_button']")
      click_save.click()
    

    【讨论】:

      【解决方案2】:

      错误即将到来,因为 selenium 无法识别给定元素的 xpath 并在那里生成异常。

      您可以做的是,您可以将代码保存在 try/catch 块中,然后执行您的代码。

      【讨论】:

        【解决方案3】:

        我不会不必要地生成错误,而是会获取匹配元素的计数并比较 len,如下所示。

        @step('Click save')
        def step_impl(context):
        
            numberOFSaveElems = len(context.browser.find_elements_by_xpath("//button[@class='save_button']"))
            if numberOfSaveElems==0:
                raise ValueError('Save button is not found')
            click_save.click()
        

        【讨论】:

          猜你喜欢
          • 2022-11-14
          • 2020-10-27
          • 1970-01-01
          • 2016-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-23
          • 1970-01-01
          相关资源
          最近更新 更多