python 模块 Selenium 自动化测试 Web 工具
文章目录
python 模块 Selenium 自动化测试 Web 工具
1. Selenium简介
2. 安装Selenium
3. 下载浏览器驱动
4. 环境变量
5. 参数
6. 定位元素的8种方式
7. 控制浏览器操作方法
8. 键盘事件
9. 获取断言信息
10. 浏览器操作
11. 设置元素等待
11.1 显示等待
11.2 隐式等待
12. 多窗口切换
13. 警告框处理
14. 定位一组元素
15. 多表单切换
16. 下拉框选择操作
17. 文件上传
18. cookie操作
19. 调用JavaScript代码
20. 窗口截图
21. 关闭浏览器
22. 封装
23. selenium 和 requests 结合
24. 禁止加载图片和JS
25. 解压 gzip
26. 监听请求
1. Selenium简介
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。可执行系统如Windows、Linux、IOS、Android等。
相关网站:
github
pypi
帮助文档
官网
2. 安装Selenium
pip install Selenium
3. 下载浏览器驱动
Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver ,or chromedriver 2
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
需要把浏览器驱动放入系统路径中,或者直接告知selenuim的驱动路径
4. 环境变量
设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: F:\GeckoDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:\GeckoDriver”目录添加到Path的值中。比如:Path字段;F:\GeckoDriver
5. 参数
另外启动浏览器,可以设置一些参数,比如无界面之类的,详细参考
可以测试是否正常使用,以下代码:
from selenium import webdriver driver = webdriver.Firefox() # Firefox浏览器 # driver = webdriver.Firefox("驱动路径") driver = webdriver.Chrome() # Chrome浏览器 driver = webdriver.Ie() # Internet Explorer浏览器 driver = webdriver.Edge() # Edge浏览器 driver = webdriver.Opera() # Opera浏览器 driver = webdriver.PhantomJS() # PhantomJS # 打开网页 driver.get(url) # 打开url网页 比如 driver.get("http://www.baidu.com")
6. 定位元素的8种方式
demo:
假如我们有一个Web页面,通过前端工具(如,Firebug)查看到一个元素的属性是这样的
<html> <head> <body link="#0000cc"> <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})"> <form id="form" class="fm" name="f" action="/s"> <span class="soutu-btn"></span> <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
通过id定位:
dr.find_element_by_id("kw")
通过name定位:
dr.find_element_by_name("wd")
通过class name定位:
dr.find_element_by_class_name("s_ipt")
通过tag name定位:
dr.find_element_by_tag_name("input")
通过xpath
定位,xpath
定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']") dr.find_element_by_xpath("//*[@name='wd']") dr.find_element_by_xpath("//input[@class='s_ipt']") dr.find_element_by_xpath("/html/body/form/span/input") dr.find_element_by_xpath("//span[@class='soutu-btn']/input") dr.find_element_by_xpath("//form[@id='form']/span/input") dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw") dr.find_element_by_css_selector("[name=wd]") dr.find_element_by_css_selector(".s_ipt") dr.find_element_by_css_selector("html > body > form > span > input") dr.find_element_by_css_selector("span.soutu-btn> input#kw") dr.find_element_by_css_selector("form#form > span > input")
接下来,我们的页面上有一组文本链接。
dr.find_element_by_link_text("新闻") dr.find_element_by_link_text("hao123")
通过link text定位:
dr.find_element_by_link_text("新闻") dr.find_element_by_link_text("hao123")
通过partial link text定位:
dr.find_element_by_partial_link_text("新") dr.find_element_by_partial_link_text("hao") dr.find_element_by_partial_link_text("123")
7. 控制浏览器操作方法
demo:
from selenium import webdriver from time import sleep #1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口 browser = webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver") #2.通过浏览器向服务器发送URL请求 browser.get("https://www.baidu.com/") sleep(3) #3.刷新浏览器 browser.refresh() #4.设置浏览器的大小 browser.set_window_size(1400,800) #5.设置链接内容 element=browser.find_element_by_link_text("新闻") element.click() element=browser.find_element_by_link_text("“下团组”时间") element.click()
8. 键盘事件
Selenium
中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()
方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。
常用的键盘操作如下:
组合键的使用
9. 获取断言信息
不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。
属性 | 说明 |
title | 用于获得当前页面的标题 |
current_url | 用户获得当前页面的URL |
text | 获取搜索条目的文本信息 |
demo:
from selenium import webdriver from time import sleep driver = webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver") driver.get("https://www.baidu.com") print('Before search================') # 打印当前页面title title = driver.title print(title) # 打印当前页面URL now_url = driver.current_url print(now_url) driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() sleep(1) print('After search================') # 再次打印当前页面title title = driver.title print(title) # 打印当前页面URL now_url = driver.current_url print(now_url) # 获取结果数目 user = driver.find_element_by_class_name('nums').text print(user) #关闭所有窗口 driver.quit()
打印输出结果
Before search================ 百度一下,你就知道 https://www.baidu.com/ After search================ selenium_百度搜索 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium&rsv_pq=a1d51b980000e36e&rsv_t=a715IZaMpLd1w92I4LNUi7gKuOdlAz5McsHe%2FSLQeBZD44OUIPnjY%2B7pODM&rqlang=cn&rsv_enter=0&rsv_sug3=8&inputT=758&rsv_sug4=759 搜索工具 百度为您找到相关结果约7,170,000个 ————————————————