一、什么是 web 自动化测试
- web 自动化测试:通过代码替换手工对网页进行的测试
- UI 自动化测试:web 自动化 + app 自动化测试
二、什么是 selenium
- selenium 是企业最主流的 web 自动化测试框架,也是中高级测试人员必备的测试框架之一
- selenium 的三大组件:
- IDE 浏览器插件:功能为录屏(将浏览器操作转化为代码)
- webdriver:功能为提供大量方法,实现对浏览器的各种操作(点击、输入、拖动......)
- Grid 分布式:功能为实现在同一浏览器执行多条用例
三、web 自动化测试环境的搭建
- 安装 Python 环境及 pycharm 集成开发工具(前面已经都安装好了)
- 安装 selenium
- dos 命令:
pip install -U selenium
- dos 命令:
- 下载客户端浏览器
- 下载与之对应的浏览器驱动(客户端浏览器的版本必须与对应浏览器驱动的版本一致 )
- 谷歌浏览器驱动 chromedriver.exe:http://npm.taobao.org/mirrors/chromedriver/
- 火狐浏览器驱动 geckodriver.exe:https://github.com/mozilla/geckodriver/releases
- IE 浏览器驱动 iedriverserver.exe:http://selenium-release.storage.googleapis.com/index.html
- 下载对应浏览器的驱动,放置 Python 的安装路径下面
四、html 及常用的标签
- 什么是 html:超文本语言,前端脚本语言(网页),超文本语言由很多一对对的标签组成
- html 的基本组成结构
<html>
<head>
<title>网页标题</title>
</head>
<body>
网页内容
</body>
</html>
3.html 的常用标签
input标签:表单标签,标签的type属性值不一样,则元素类型也不一样
div标签:用来页面布局,在 div 下面可以嵌套更多的元素的标签对img:图片标签a:超链接标签form:表单标签- ......
应用:例题一
import time
from selenium import webdriver #
from selenium.webdriver.common.by import By #
#打开浏览器
driver = webdriver.Chrome()
#加载项目地址
driver.get("https://www.baidu.com/")
driver.get("https://www.hao123.com/")
find_element() #返回一个元素
find_elements(定位方法,定位语句) #找一组元素 ,返回一组元素,返回的是列表
class By:
"""Set of supported locator strategies."""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
前六种都是通过特殊属性定位,且唯一
**#定位百度搜索输入框
#定位方法一:通过id属性定位,id属性值唯一**
baidu_sous = driver.find_element(By.ID,"chat-textarea")
# #定位方法二:通过name属性定位,name属性值唯一
baidu_sous = driver.find_element(By.NAME,"wd")
baidu_sous.send_keys("火影忍者")
# #定位方法三:通过标签定位(基本不用,一般不会只通过标片进行定位,一般进行组合定位)
baidu_sous = driver.find_element(By.TAG_NAME,"input")
#定位方法四:通过class属性定位,class属性值唯一
baidu_sous = driver.find_element(By.CLASS_NAME,"chat-input-textarea chat-input-scroll-style")
# #定位方法五:通过链接文本定位 针对a标签进行定位
news_element = driver.find_element(By.LINK_TEXT,"新闻")
# 点击
news_element.click()
# #定位方法六:通过部分链接文本定位 针对a标签进行定位
news_element = driver.find_element(By.PARTIAL_LINK_TEXT,"地")
news_element.click()
#定位方法七:通过xpath定位
# #1.通过绝对路径定位,开头是/
#/html/body/div[1]/div[2]/div[3]/div/div/div[2]/div/div/div/div/div[1]/div[4]/div[1]/div[2]/textarea
baidu_sous = driver.find_element(By.XPATH,"/html/body/div[1]/div[2]/div[3]/div/div/div[2]/div/div/div/div/div[1]/div[4]/div[1]/div[2]/textarea")
baidu_sous.send_keys("火影忍者")
# 2.通过相对路径定位
# 相对路径:是从某个路径开始的,开头是//
baidu_sous = driver.find_element((By.XPATH,"//div[@id='chat-input-container']/textarea"))
baidu_sous.send_keys("火影忍者")
hao123_sous = driver.find_element(By.XPATH,"//form/div[2]/input[1]")
# #3.兄弟标签 通过标签加索引(索引从1开始)
hao123 = driver.find_element(By.XPATH,"//div[@id='s-top-left']/a[2]")
hao123.click()
# # 4.标签[@属性名='属性值']
#多属性定位 标签[@属性名1='属性值1' and @属性名2='属性值2']
# hao123_sous = driver.find_element(By.XPATH,"//input[@name='word']")
hao123_sous = driver.find_element(By.XPATH,"//input[@name='word' and @data-hook='searchInput']")
#5. 通过部分属性值定位 标签+属性
# (1)标签[substring(@属性名,3)='字符串'] 返回从参数1字符串中,某个位置开始截取,截取到最后
hao123_sous = driver.find_element(By.XPATH,"//input[substring(@name,3)='rd']")
# (2)标签[contains(@属性名/方法,'部分属性值')]
hao123_sous = driver.find_element(By.XPATH,"//input[contains(@name,'rd')]")
#6. (1)通过文本定位 //标签[text()="文本内容"]
hao123_tianq = driver.find_element(By.XPATH,"//a[text()='七日天气']")
hao123_tianq.click()
(2)通过部分文本进行定位
hao123_tianq = driver.find_element(By.XPATH,"//*[contains(text(),'七日')]")
hao123_tianq.click()
#定位方法八:通过css选择器定位
#发送
hao123_sous.send_keys("火影忍者")
time.sleep(5) #休眠5秒
driver.close()
例题二
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 打开浏览器
driver = webdriver.Chrome()
# 加载项目地址,打开京东
driver.get("https://re.m.jd.com/page/homelike")
#代码运行比页面加载快,所以要等待
#强制等待3秒
time.sleep(3)
#智能等待
# (1)隐式等待
driver.implicitly_wait(10)
# (2)显式等待
jd_goods = driver.find_elements(By.XPATH,"//ul[@class='service-bd']/li[1]/div[@class='first-cate-container']/a")
jd_goods1 = jd_goods[0]
jd_goods1.click()