zoukankan      html  css  js  c++  java
  • Selenium2+python自动化57-捕获异常(NoSuchElementException)【转载】

    前言

    在定位元素的时候,经常会遇到各种异常,为什么会发生这些异常,遇到异常又该如何处理呢?

    本篇通过学习selenium的exceptions模块,了解异常发生的原因。

    一、发生异常

    1.打开博客首页,定位“新随笔”元素,此元素id="blog_nav_newpost"

    2.为了故意让它定位失败,我在元素属性后面加上xx

    3.运行失败后如下图所示,程序在查找元素的这一行发生了中断,不会继续执行click事件了

    二、捕获异常

    1.为了让程序继续执行,我们可以用try...except...捕获异常。捕获异常后可以打印出异常原因,这样以便于分析异常原因

    2.从如下异常内容可以看出,发生异常原因是:NoSuchElementException

    selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"blog_nav_newpostxx"}

    3.从selenium.common.exceptions 导入 NoSuchElementException类

    三、参考代码:

    # coding:utf-8
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    driver = webdriver.Firefox()
    driver.get("http://www.cnblogs.com/yoyoketang/")
    # 定位首页"新随笔"
    try:
        element = driver.find_element("id", "blog_nav_newpostxx")
    except NoSuchElementException as msg:
        print u"查找元素异常%s"%msg

    # 点击该元素   # 交流QQ群:232607095
    else:
        element.click()

    四、selenium常见异常

    1.NoSuchElementException:没有找到元素

    2.NoSuchFrameException:没有找到iframe

    3.NoSuchWindowException:没找到窗口句柄handle

    4.NoSuchAttributeException:属性错误

    5.NoAlertPresentException:没找到alert弹出框

    6.lementNotVisibleException:元素不可见

    7.ElementNotSelectableException:元素没有被选中

    8.TimeoutException:查找元素超时

    五、其它异常与源码

    1.在Lib目录下:Libsite-packagesseleniumcommon有兴趣的可以看看

    # Licensed to the Software Freedom Conservancy (SFC) under one
    # or more contributor license agreements.  See the NOTICE file
    # distributed with this work for additional information
    # regarding copyright ownership.  The SFC licenses this file
    # to you under the Apache License, Version 2.0 (the
    # "License"); you may not use this file except in compliance
    # with the License.  You may obtain a copy of the License at
    #
    #   http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing,
    # software distributed under the License is distributed on an
    # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    # KIND, either express or implied.  See the License for the
    # specific language governing permissions and limitations
    # under the License.

    """
    Exceptions that may happen in all the webdriver code.
    """


    class WebDriverException(Exception):
        """
        Base webdriver exception.
        """

        def __init__(self, msg=None, screen=None, stacktrace=None):
            self.msg = msg
            self.screen = screen
            self.stacktrace = stacktrace

        def __str__(self):
            exception_msg = "Message: %s " % self.msg
            if self.screen is not None:
                exception_msg += "Screenshot: available via screen "
            if self.stacktrace is not None:
                stacktrace = " ".join(self.stacktrace)
                exception_msg += "Stacktrace: %s" % stacktrace
            return exception_msg


    class ErrorInResponseException(WebDriverException):
        """
        Thrown when an error has occurred on the server side.

        This may happen when communicating with the firefox extension
        or the remote driver server.
        """
        def __init__(self, response, msg):
            WebDriverException.__init__(self, msg)
            self.response = response


    class InvalidSwitchToTargetException(WebDriverException):
        """
        Thrown when frame or window target to be switched doesn't exist.
        """
        pass


    class NoSuchFrameException(InvalidSwitchToTargetException):
        """
        Thrown when frame target to be switched doesn't exist.
        """
        pass


    class NoSuchWindowException(InvalidSwitchToTargetException):
        """
        Thrown when window target to be switched doesn't exist.

        To find the current set of active window handles, you can get a list
        of the active window handles in the following way::

            print driver.window_handles

        """
        pass


    class NoSuchElementException(WebDriverException):
        """
        Thrown when element could not be found.

        If you encounter this exception, you may want to check the following:
            * Check your selector used in your find_by...
            * Element may not yet be on the screen at the time of the find operation,
            (webpage is still loading) see selenium.webdriver.support.wait.WebDriverWait()
            for how to write a wait wrapper to wait for an element to appear.
        """
        pass


    class NoSuchAttributeException(WebDriverException):
        """
        Thrown when the attribute of element could not be found.

        You may want to check if the attribute exists in the particular browser you are
        testing against.  Some browsers may have different property names for the same
        property.  (IE8's .innerText vs. Firefox .textContent)
        """
        pass


    class StaleElementReferenceException(WebDriverException):
        """
        Thrown when a reference to an element is now "stale".

        Stale means the element no longer appears on the DOM of the page.


        Possible causes of StaleElementReferenceException include, but not limited to:
            * You are no longer on the same page, or the page may have refreshed since the element
            was located.
            * The element may have been removed and re-added to the screen, since it was located.
            Such as an element being relocated.
            This can happen typically with a javascript framework when values are updated and the
            node is rebuilt.
            * Element may have been inside an iframe or another context which was refreshed.
        """
        pass


    class InvalidElementStateException(WebDriverException):
        """
        """
        pass


    class UnexpectedAlertPresentException(WebDriverException):
        """
        Thrown when an unexpected alert is appeared.

        Usually raised when when an expected modal is blocking webdriver form executing any
        more commands.
        """
        def __init__(self, msg=None, screen=None, stacktrace=None, alert_text=None):
            super(UnexpectedAlertPresentException, self).__init__(msg, screen, stacktrace)
            self.alert_text = alert_text

        def __str__(self):
            return "Alert Text: %s %s" % (self.alert_text, super(UnexpectedAlertPresentException, self).__str__())


    class NoAlertPresentException(WebDriverException):
        """
        Thrown when switching to no presented alert.

        This can be caused by calling an operation on the Alert() class when an alert is
        not yet on the screen.
        """
        pass


    class ElementNotVisibleException(InvalidElementStateException):
        """
        Thrown when an element is present on the DOM, but
        it is not visible, and so is not able to be interacted with.

        Most commonly encountered when trying to click or read text
        of an element that is hidden from view.
        """
        pass


    class ElementNotSelectableException(InvalidElementStateException):
        """
        Thrown when trying to select an unselectable element.

        For example, selecting a 'script' element.
        """
        pass


    class InvalidCookieDomainException(WebDriverException):
        """
        Thrown when attempting to add a cookie under a different domain
        than the current URL.
        """
        pass


    class UnableToSetCookieException(WebDriverException):
        """
        Thrown when a driver fails to set a cookie.
        """
        pass


    class RemoteDriverServerException(WebDriverException):
        """
        """
        pass


    class TimeoutException(WebDriverException):
        """
        Thrown when a command does not complete in enough time.
        """
        pass


    class MoveTargetOutOfBoundsException(WebDriverException):
        """
        Thrown when the target provided to the `ActionsChains` move()
        method is invalid, i.e. out of document.
        """
        pass


    class UnexpectedTagNameException(WebDriverException):
        """
        Thrown when a support class did not get an expected web element.
        """
        pass


    class InvalidSelectorException(NoSuchElementException):
        """
        Thrown when the selector which is used to find an element does not return
        a WebElement. Currently this only happens when the selector is an xpath
        expression and it is either syntactically invalid (i.e. it is not a
        xpath expression) or the expression does not select WebElements
        (e.g. "count(//input)").
        """
        pass


    class ImeNotAvailableException(WebDriverException):
        """
        Thrown when IME support is not available. This exception is thrown for every IME-related
        method call if IME support is not available on the machine.
        """
        pass


    class ImeActivationFailedException(WebDriverException):
        """
        Thrown when activating an IME engine has failed.
        """
        pass

  • 相关阅读:
    七。进度管理
    六。质量管理
    五。项目范围管理
    四。项目整体管理
    三。项目立项管理
    二。项目的一般只知识
    一。项目管理的管理领域
    8.BGP
    英语词汇基础
    vim中输入tab符
  • 原文地址:https://www.cnblogs.com/caoj/p/7814260.html
Copyright © 2011-2022 走看看