一、什么是Selenium?
是一个模拟控制浏览器操作的自动化库,它可以做到
- 元素定位,
- 鼠标事件,
- 浏览器事件,
- js脚本执行等操作。
二、什么是webdriver?
WebDriver是W3C的一个标准,由Seleniumz主持,主要目的是通过WebDriverAPI控制电脑上的浏览器,相当于一个selenium和浏览器之间的驱动。
需要注意!不同浏览器,需要安装不同的WebDriver。(如chrome需要下载chromedriver)
三、怎么使用?
1、创建WebDriver对象,相当于启动了浏览器
driver = webdriver.Chrome()
2、对WebDriver对象的操作可以抽象成你怎么去控制浏览器,常用的有:
- 访问URL driver.get("http://www.python.org")
- 刷新页面 driver.refresh()
- 前进后退 driver.forward()/driver.back()
- 关闭浏览器 driver.quit()
- 关闭窗口 driver.close()
- 执行js driver.execute_script(script,*args)
- 获取cookies driver.get_cookies()
3、怎么模拟用户操作?
1)、通过WebDriver对象定位元素方法,找到元素对象(元素定位)
find_element_by_name()
find_element_by_id()
find_element_by_xpath()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_selector()
其中最常用的是find_element_by_xpath()!!
2)、对元素对象进行用户模拟的操作,如点击,输入等
点击: element.click()
发送文字: element.send_keys("username")
模拟键盘输入:
(使用删除键): element.send_keys(Keys.BACKSPACE)
获取文本框的值: element.get_attribute('value')
提交表单: element.submit()
四、元素定位方法
1、xpath定位
1)、介绍
XPath,全称为XML Path Language,即XML 路径语言,它是一门在XML文档中查找信息的语言。XPath 最初设计是用来搜寻XML文档的,但是它同样适用于 HTML 文档的搜索。
| 表达式 | 描述 |
|---|---|
| nodename | 选取此节点的所有子节点。 |
| / | 从根节点选取。 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
| . | 选取当前节点。 |
| .. | 选取当前节点的父节点。 |
| @ | 选取属性。 |
2)、Xpath示例:
| 路径表达式 | 结果 |
|---|---|
| bookstore | 选取 bookstore 元素的所有子节点。 |
| /bookstore | 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! |
| bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
| //book | 选取所有 book 子元素,而不管它们在文档中的位置。 |
| bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
| //@lang | 选取名为 lang 的所有属性。 |
| /bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
| //title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
3)、利用Chrome浏览器的开发者工具,可以快速获取XPath表达式
2、CSS选择器定位
在css中,选择器是一种模式,用于选择需要添加样式的元素
| 选择器 | 含义 |
|---|---|
| * | 通用元素选择器,匹配页面任何元素(这也就决定了我们很少使用) |
| #id | id选择器,匹配特定id的元素 |
| .class | 类选择器,匹配class包含(不是等于)特定类的元素 |
| element | 标签选择器 根据标签选择元素 |
| [attr] | 属性选择器 根据元素属性去选择 |
五、Page Object Model(POM)
Page Object模式主要是将每个页面封装为一个类class,这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法,
写测试用例时就可以通过调用页面类的方法和属性来获取页面元素和操作元素, (写用例时,有涉及到的元素操作通用的,就需要加进对应Page中,方便集中管理)
这样优点是避免当页面元素的Xpath或属性改变时需要更改测试用例代码的情况,只要通过更改页面类的属性即可
六、结合Pytest使用
pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。并且pytest兼容unittest的用例,支持的插件也更多。
写用例:
@pytest.mark.xxx(给用例打标签,归类)
def test_waf_xxx(): (test开头的方法就是一个用例)
logger.info("#step1 create proxy")
webconsole.user_login() #利用webdirver在用户登陆界面进行用户登陆
webconsole.select_proxy_settings()
运行用例:
pytest -v -s --local chrome [用例文件相对路径]
七、自动化环境部署
1、拉取代码
2、创建虚拟环境
3、安装所有依赖
pip install -r requirements.txt
4、配置环境
1)、设置免密登陆
2)、对于要进行修改的文件,重新保存一个
3)、安装webdriver,与自己本地的浏览器对应
5、命令行运行以往的用例查看环境是否正常运行
py.test -v -s --local chrome xxx(用例py文件路径)
如果没有报错,即本地自动化环境部署基本完成,上面的执行命令会在执行路径时生成一个html报告,可在chrome中查看执行情况。
(-v的意思是显示详细的执行信息,-s表示可以显示打印信息,--local不是pytest的命令选项是libs里面解析的,表示本地执行)