自动化测试执行过程中, 难免会有错误 / 异常出现, 比如测试脚本没有发现对应元素, 则会立刻抛出 NoSuchElementException 异常. 这时不要怕, 肯定是测试脚本或者测试环境哪里出错了! 那如何处理才是关键? 因为一般只是局部有问题, 为了让脚本继续执行, so 我们可以用 try...except...raise 捕获异常. 该捕获异常后可以打印出相应的异常原因, 这样以便于分析异常原因.
下面将举例说明, 当异常抛出后将信息打印在控制台, 同时截取当前浏览器窗口, 作为后续 bug 的依据给相应开发人员更好下定位问题. 代码如下:
- import unittest
- from selenium import webdriver
- from selenium.common.exceptions import NoSuchElementException #导入 NoSuchElementException
- class ExceptionTest(unittest.TestCase):
- def setUp(self):
- self.driver = webdriver.Chrome()
- self.driver.get("https://www.baidu.com")
- def test_exception(self):
- driver = self.driver
- try:
- search_text = driver.find_element_by_id("ss")
- self.assertEqual('百度一下', search_text.get_attribute("value"))
- except NoSuchElementException:
- file_name = "no_such_element.png"
- #driver.save_screenshot(file_name)
- driver.get_screenshot_as_file(file_name)
- raise #抛出异常, 注释后则不抛出异常
- def tearDown(self):
- self.driver.quit()
- if __name__ == '__main__':
- unittest.main(verbosity=2)
运行有异常, 结果如下:
上面代码中用到 WebDriver 内置的捕获屏幕并保存的方法, 如这里的 save_screenshot(filename) 方法和 save_screenshot_as_file(filename) 方法, 在测试异常抛出时, 同时截取浏览器屏幕并以自定义的图片文件名保存在指定路径 (上面代码为当前路径).
又如当一个元素呈现在 DOM, 但它是不可见的, 不能与之进行交互, 异常将抛出, 以百度首页的登录为例, 当元素是不可见时, 抛出 ElementNotVisibleException 的异常, 代码如下:
- import unittest
- from selenium import webdriver
- from selenium.common.exceptions import ElementNotVisibleException #导入 ElementNotVisibleException
- class ExceptionTest(unittest.TestCase):
- def setUp(self):
- self.driver = webdriver.Chrome()
- self.driver.get("https://www.baidu.com")
- def test_exception(self):
- driver = self.driver
- try:
- login = driver.find_element_by_name("tj_login")
- login.click()
- except ElementNotVisibleException:
- raise
- def tearDown(self):
- self.driver.quit()
- if __name__ == '__main__':
- unittest.main(verbosity=2)
运行有异常, 结果如下:
下面将列举 selenium 常见的异常:
如果想了解更多异常, 可以直接到你的 python 安装路径下面的 \ Lib\site-packages\selenium\common, 打开 exceptions.py 文件~
来源: https://www.cnblogs.com/cnkemi/p/8985654.html