云服务器

selenium之异常处理try…except…

2019-12-06 17:28:40 229

      在实际selenium自动化脚本开发及调试过程中,多多少少会存在脚本报错情况。报错信息大多数是网络加载延缓导致元素无法定位而报错,而这种情况的最直接的解决方法就是增加等待时间(强制等待、显式等待、隐式等待)来解决此问题。

      但是实际开发中不一定只会因等待时间而报错情况。有前端调整的元素定位的情况,浏览器及对应驱动版本不一致无法兼容的情况…… 

       以上情况可以使用python基础语法中的try…except…finally…给予异常的捕获、抛出及接下来要执行什么指令的情况。


用浏览器驱动举例子:

from selenium import webdriverfrom selenium.common.exceptions import WebDriverExceptiontry:    driver = webdriver.Chrome()    print("驱动成功:")except WebDriverException as driver_error:    print("驱动失败:")    print(driver_error)finally:    print("随心所欲……")

       以上代码简单讲解了驱动存在问题的异常捕获、抛出及接下来要执行的情况。如果驱动一切正常则打印(驱动成功:),如果失败则打印(驱动失败:),最后try…except…走完其中一个路径之后,无论成功与否都会打印(随心所欲……)
       为了进一步了解异常处理情况,增加使用元素定位问题写个相应例子:

from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptiondriver = webdriver.Firefox()driver.maximize_window()driver.get("http://ecp.eflycloud.com/login")#尝试去进行以下元素定位try:    driver.find_element_by_xpath("/html/body/my-app/app-login/div[1]/div[2]/div[2]/div[2]/p[1]/input").send_keys("admin")    driver.find_element_by_xpath("/html/body/my-app/app-login/div[1]/div[2]/div[2]/div[2]/p[2]/input").send_keys("password")    # 错误的定位方式    driver.find_element_by_id("login").click()except NoSuchElementException as error:    print(error)    # 保存截图到当前路径,格式:对象名.get_screenshot_as_file("路径")    driver.get_screenshot_as_file("./error.png")finally:    print("==========over=========")

      两个例子简单讲解了异常如何使用,接下来整合所收集selenium对应的异常信息方法。


以下列出selenium提供的异常信息列表:

Exceptions(异常)
异常可能发生在所有的WebDriver中的代码。

异常:    selenium.common.exceptions.ElementNotSelectableException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.InvalidElementStateException    当尝试选择一个未能选中的元素时,异常会抛出异常:          selenium.common.exceptions.ElementNotVisibleException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.InvalidElementStateException    虽然当一个元素呈现在DOM,但它是不可见的,因此不能够以进行交互,异常将抛出异常:    selenium.common.exceptions.ErrorInResponseException(response, msg)依据:    selenium.common.exceptions.WebDriverException    服务器端有错误时,异常将抛出(这个原因可能是因为Firefox插件或者远程server)异常:    selenium.common.exceptions.ImeActivationFailedException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    激活输入法失败时异常会抛出。异常:    selenium.common.exceptions.ImeNotAvailableException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    当输入法不支持的时候异常将抛出。异常:    selenium.common.exceptions.InvalidCookieDomainException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    试图在不同的domain而不是目前的URL中添加一个cookie时抛出异常异常:    selenium.common.exceptions.InvalidElementStateException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    无效的元素状态异常:    selenium.common.exceptions.InvalidSelectorException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.NoSuchElementException    当选择器没有返回一个web元素时,异常抛出。异常:    selenium.common.exceptions.InvalidSwitchToTargetException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    当切换的窗口或者框架不存在的时候,异常将抛出。异常:    selenium.common.exceptions.MoveTargetOutOfBoundsException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    提供给ActionChainsmovable()方法的目标无效时,异常将抛出,例如:超出文件外异常:    selenium.common.exceptions.NoAlertPresentException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException     切换到没有呈现的警示时抛出异常异常:    selenium.common.exceptions.NoSuchAttributeException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException      当元素的属性不能被发现时异常抛出异常:    selenium.common.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    元素不能被找到时异常抛出异常:    selenium.common.exceptions.NoSuchFrameException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.InvalidSwitchToTargetException    需要切换的目标框架不存在时,异常抛出异常:    selenium.common.exceptions.NoSuchWindowException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.InvalidSwitchToTargetException    需要切换的目标窗口不存在时,异常抛出异常:    selenium.common.exceptions.RemoteDriverServerException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException异常:    selenium.common.exceptions.StaleElementReferenceException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    一个参考的元素现在是“过时”时抛出异常。     “过时”是指这个元素不再出现在页面的Dom中。异常:    selenium.common.exceptions.TimeoutException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    一条命令在足够的时间内没有完成则会抛出异常异常:    selenium.common.exceptions.UnableToSetCookieException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    当一个驱动程序无法设置cookie时抛出异常。异常:    selenium.common.exceptions.UnexpectedAlertPresentException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    当一个意外的警告出现时将抛出异常。异常:    selenium.common.exceptions.UnexpectedTagNameException(msg=None, screen=None, stacktrace=None)依据:    selenium.common.exceptions.WebDriverException    辅助类没有获取到期待的web元素时,会抛出异常异常:    selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)依据:    exceptions.Exception    WebDriver基础的异常类

    以上是selenium异常处理try…except…的方法讲解,下一期为selenium鼠标键盘事件。




睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032


上一篇: 无

微信关注

获取更多技术咨询