selenium常见异常

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.ui import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as EC
  5. from selenium.common.exceptions import TimeoutException, ElementNotVisibleException, NoSuchElementException

1.NoSuchElementException:没有找到元素

2.NoSuchFrameException:没有找到iframe

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

4.NoSuchAttributeException:属性错误

5.NoAlertPresentException:没找到alert弹出框

6.lementNotVisibleException:元素不可见

7.ElementNotSelectableException:元素没有被选中

8.TimeoutException:查找元素超时


  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.support.ui import Select
  5. from selenium.common.exceptions import NoSuchElementException
  6. import unittest, time, re
  7.  
  8. class Baidu(unittest.TestCase):
  9. def setUp(self):
  10. self.driver = webdriver.Firefox()
  11. self.driver.implicitly_wait(30)
  12. self.base_url = "http://www.baidu.com/"
  13. self.verificationErrors = []
  14. self.accept_next_alert = True
  15.  
  16. def test_baidu(self):
  17. driver = self.driver
  18. driver.get(self.base_url + "/")
  19. driver.find_element_by_id("kw").send_keys("selenium webdriver")
  20. driver.find_element_by_id("su").click()
  21. driver.close()
  22.  
  23. def is_element_present(self, how, what):
  24. try: self.driver.find_element(by=how, value=what)
  25. except NoSuchElementException, e: return False
  26. return True
  27.  
  28. def is_alert_present(self):
  29. try: self.driver.switch_to_alert()
  30. except NoAlertPresentException, e: return False
  31. return True
  32.  
  33. def close_alert_and_get_its_text(self):
  34. try:
  35. alert = self.driver.switch_to_alert()
  36. alert_text = alert.text
  37. if self.accept_next_alert:
  38. alert.accept()
  39. else:
  40. alert.dismiss()
  41. return alert_text
  42. finally: self.accept_next_alert = True
  43.  
  44. def tearDown(self):
  45. self.driver.quit()
  46. self.assertEqual([], self.verificationErrors)
  47.  
  48. if __name__ == "__main__":
  49. unittest.main()

框架分析

  1. import unittest

相想使用unittest框架,首先要引入unittest 包,这个不多解释。

  1. class Baidu(unittest.TestCase):

Baidu类继承unittest.TestCase 类,从TestCase类继承是告诉unittest模块的方式,这是一个测试案例。

  1. def setUp(self):
  2.   self.driver = webdriver.Firefox()
  3.   self.base_url = "http://www.baidu.com/"

setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。

  1. self.verificationErrors = []

脚本运行时,错误的信息将被打印到这个列表中。

  1. self.accept_next_alert = True

是否继续接受下一下警告(字面意思,没找到解释!)

  1. def test_baidu(self):
  2. driver = self.driver
  3. driver.get(self.base_url + "/")
  4. driver.find_element_by_id("kw").send_keys("selenium webdriver")
  5. driver.find_element_by_id("su").click()

test_baidu中放置的就是我们的测试脚本了,这部分我们并不陌生;因为我们执行的脚本就在这里。

  1. def is_element_present(self, how, what):
  2. try: self.driver.find_element(by=how, value=what)
  3. except NoSuchElementException, e: return False
  4. return True

is_element_present函数用来查找页面元素是否存在,在这里用处不大,通常删除。

因为判断页面元素是否存在一般都加在testcase中。

  1. def is_alert_present(self):
  2. try: self.driver.switch_to_alert()
  3. except NoAlertPresentException, e: return False
  4. return True

对弹窗异常的处理

  1. def close_alert_and_get_its_text(self):
  2. try:
  3. alert = self.driver.switch_to_alert()
  4. alert_text = alert.text
  5. if self.accept_next_alert:
  6. alert.accept()
  7. else:
  8. alert.dismiss()
  9. return alert_text
  10. finally: self.accept_next_alert = True

关闭警告和对得到文本框的处理,如果不熟悉python的异常处理和if 语句的话,请去补基础知识,这里不多解释。

  1. def tearDown(self):
  2. self.driver.quit()
  3. self.assertEqual([], self.verificationErrors)

tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。

self.assertEqual([], self.verificationErrors)是个难点,对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。

而且,这个东西,也可以将来被你自己更好的调用和使用,根据自己的需要写入你希望的信息。(rabbit 告诉我的)

  1. if __name__ == "__main__":
  2.   unittest.main()

unitest.main()函数用来测试 类中以test开头的测试用例

执行结果

这样一一分析下来,我们对unittest 框架有了初步的了解。运行脚本,因为引入了unittest 框架,所以控制台输出了脚本执行情况的信息。

  1. >>> ========================= RESTART ================================
  2. >>>
  3. .
  4. ----------------------------------------------------------------------
  5. Ran 1 test in 10.656s
  6.  
  7. OK
  8. >>>

selenium--unittest 框架/selenium--常见异常的更多相关文章

  1. python selenium --unittest 框架

    转自:http://www.cnblogs.com/fnng/p/3300788.html 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习sele ...

  2. struts2.1.8+hibernate2.5.6+spring3.0(ssh2三大框架)常见异常原因和解决方案

    ---------------------------------------------------------------------------------------------------- ...

  3. Python+Selenium+Unittest框架使用——Selenium——模拟操作浏览器(三)

    1.浏览器大小的控制 Set_window_size()是控制浏览器大小 Maximize_window()浏览器全屏显示 from selenium import webdriver #导入sele ...

  4. Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

    1.定位元素(id.name.class.link.partial link) (1)find_element_by_id() 用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”, ...

  5. selenium的常见异常

    selenium的常见异常 Exceptions(异常)Python 自带的异常,所有异常的基类. 异常: selenium.common.exceptions.ElementNotSelectabl ...

  6. Selenium常见报错问题(1)- 先来认识下selenium常见异常类

    如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这一系列的文章,看看有没有你需要的答案 https://www.cnblogs.com/poloyy/category/1749 ...

  7. Python+Selenium+Unittest实现PO模式web自动化框架(6)

    1.TestCases目录下的模块 TestCases目录下是存放测试用例的目录. TestCases目录下的测试用例采用unittest框架来构建. 例如:登录功能的测试用例.(test_1_log ...

  8. selenium实例:unittest框架+PO开发模式

    这是<selenium2+python学习总结>的升级版. 1.         项目结构 2.         项目代码 1)         globalparameter.py # ...

  9. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  10. selenium + python自动化测试unittest框架学习(一)selenium原理及应用

    unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...

随机推荐

  1. 深入浅出Cocoa多线程编程之 block 与 dispatch quene

    深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Ap ...

  2. MySQL数据库存储过程动态表建立(PREPARE)

    PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...]] / ...

  3. .net 异步编程async & await关键字的思考

    C# 5.0引入了两个关键字 async和await,这两个关键字在很大程度上帮助我们简化了异步编程的实现代码,而且TPL中的task与async和await有很大的关系 思考了一下异步编程中的asy ...

  4. j2EE经典面试题

    1. hibernate中离线查询去除重复项怎么加条件? dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 2. http协议及端口,sm ...

  5. innobackupex 简单使用笔记

    innobackupex 选项介绍 --backup 备份 --apply-log   应用日志 --move-back  --copy-back 恢复 --export 只导出单个表.前提是使用in ...

  6. Lintcode395 Coins in a Line II solution 题解

    [题目描述] There are n coins with different value in a line. Two players take turns to take one or two c ...

  7. ffmpeg转换参数和压缩输出大小的比率 参考 最新版本FFMPEG

    https://blog.cnlabs.NET/3668.html ffmpeg 转换压缩比例 FFMPEG如果是压缩为FLV文件 3个编码可选1. -c:v flv 标准FLV编码 这个好处是速度快 ...

  8. 用calc()绘制手机图案解锁的九宫格样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 微信小程序入门二

    # 微信小程序开发实战 ## 准备 ### 课程概要 - 微信小程序基本介绍- 开发环境及工具的安装配置- 微信小程序的设计规范- 微信小程序基本结构分析- WXML和WXSS语法规范- 微信小程序A ...

  10. zlib 压缩输出缓冲区 overflow 问题

    [TOC] 问题 后台服务传包太大时,我们框架可以使用 zlib 库对响应进行压缩:在这次服务调试过程中,使用 zlib compress2 以 Z_BEST_COMPRESSION 模式进行压缩时, ...