关于一些前提准备条件和说明
-
支持Chrome、Firefox、IE、Phantomjs等浏览器
-
需要下载对应浏览器的webDriver,其中Phantomjs无头浏览器不需要下载webdriver,其优点是不需要加载网页,速度比较快,Firefox有些条件下可以不用driver
-
这里引入常见的driver下载地址,Chrome webdriver下载地址一...
为防止官方下载地址失效,这里备份到文件服务器70.0~73.0 Chrome版本(同一大版本,基本兼容小版本) Chrome webDrive下载地址二...
火狐浏览器Firefox WebDriver IE浏览器IE webDriver -
方法1:webDriver需要放在浏览器安装目录下(执行文件同级目录,并且加入环境变量)。 方法2:直接将webDriver拷贝到脚本同级目录下执行。方法3:
导入os包,将脚本执行目录切换到webDriver的目录下(os.chdir(path)) -
Phantomjs浏览器安装,下载地址,win下解压zip包,将bin目录加到系统环境变量,在命令行输入phantomjs,既可看到。
Phantomjs使用教程 -
安装selenium,基于Python的selenium安装,
pip install selenium
,查看版本pip show selenium
-
最新Firefox和Seleniu兼容有问题,相关解决方案:
- 安装旧版本Firefox47,同时安装插件firebug和firepath(写爬虫很有用),这里需要关闭火狐浏览器的自动更新功能(百度查找方法),
Firefox下载地址 - Selenium3以前的版本,使用firefox不需要webdriver,3.x后的版本需要安装webdriver,下载地址上有说明
- 安装旧版本Firefox47,同时安装插件firebug和firepath(写爬虫很有用),这里需要关闭火狐浏览器的自动更新功能(百度查找方法),
-
结合的测试框架(基于Python):
- unittest: 一般python环境自带,示例代码:
import unittest def fun(x): return x + 1 class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4)
使用说明详细
常见断言:#msg:判断不成立时需要反馈的字符串 assertEqual(self, first, second, msg=None) --判断两个参数相等:first == second assertNotEqual(self, first, second, msg=None) --判断两个参数不相等:first != second assertIn(self, member, container, msg=None) --判断是字符串是否包含:member in container assertNotIn(self, member, container, msg=None) --判断是字符串是否不包含:member not in container assertTrue(self, expr, msg=None) --判断是否为真:expr is True assertFalse(self, expr, msg=None) --判断是否为假:expr is False assertIsNone(self, obj, msg=None) --判断是否为None:obj is None assertIsNotNone(self, obj, msg=None) --判断是否不为None:obj is not None
- unittest2: unittest升级版,详细文档 https://pypi.org/project/unittest2/
- py.test:
Selenium + Pytest + Allure
pytest+allure2+jenkins
Python&Selenium&pytest借助allure生成自动化测试报告 - Nose: Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等
nose的详细文档:https://nose.readthedocs.org/en/latest/
注意:nose本身是支持python3的,但是很多它的插件不支持 - tox:
最大的特色,是自动最测试环境的管理以及使用多个解析器配置进行测试。
tox的详细文档:http://testrun.org/tox/latest/
Selenium介绍,来源: selenium中文文档
注意!!!如果使用远程webDriver,需要安装selenium服务器:
- 需要Java Runtime Environment (JRE) 1.6或者更高的版本是推荐的运行环境。
- server下载地址:下载地址1,我的服务器下载地址2
- 针对以及装好java环境和下载好了server的win系统,命令行运行:
java -jar selenium-server-standalone-2.x.x.jar
(这里我没有成功,可能是java环境没装好,什么时候用得到远程再来折腾)
linux下/path/to/java -jar /path/to/selenium-server-standalone-2.x.x.jar
1. 打开一个页面
-
导入selenium包后绑定对应浏览器的webdriver
driver.get("http://www.zhihu.com")
-
页面元素查找
find_element_by_name()
find_element_by_class_name()
-
find_element_by_xpath()
这种定位方式参考 xpath语法一般浏览器自带的源代码检查可以copy xpath格式 -
find_element_by_css_selector()
参考CSS语法 selector语法一般浏览器自带的源代码检查可以copy selector格式 -
find_element_by_tag_name ()
标签名定位 -
find_element_by_link_text()
find_element_by_partial_link_text()
二者都是点位超链接,第一种需要定位完整的超链接字段,第二种可以匹配部分超链接字段 find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新闻")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
-
页面交互
-
element.send_keys("some text")
发送关键词到input -
element.send_keys(" and some", Keys.ARROW_DOWN)
自带的键盘模拟类执行enter -
.click
选择 -
.submit
提交表单
-
网友评论