WEB测试
一、环境安装
1、安装selenium
命令行使用以下命令安装selenium:pip install -U selenium
2、安装chrome浏览器chrome和chromedriver下载
链接:https://pan.baidu.com/s/1eSct8LO 密码:xeca
3、chromedirver放在python的安装根目录下面即可
下载链接中,只提供了windows版本的chrome和chromedriver
其它操作系统需要另外下载:
chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver/
二、selenium的基本使用
1、导入selenium
from selenium import webdriver
2、启动谷歌浏览器,开启与浏览器之间的会话
// service_log_path="D:\\chromedriver_service.log" 日志保存的地址
driver=webdriver.Chrome(service_log_path="D:\\chromedriver_service.log")
3、访问一个网页
driver.get("http://www.baidu.com")
4、窗口最大化
driver.maximize_window()
5、设置窗口的大小
driver.set_window_size()
6、回退上一页
driver.back()
7、回退下一页
driver.forward()
8、刷新
driver.refresh()
9、获取标题
print(driver.title)
10、获取网址
print(driver.current_url)
11、窗口的句柄
print(driver.current_window_handle)
12、结束会话
#关闭chrome,结束webdriver服务
driver.quit()
13、关闭当前窗口
driver.close()
三、webDriver元素定位的几种方式
(1) id (2) class_name (3) name
(4) tag_name (5) link_text(只对链接有效) (6) partial_link_text
(7) Xpath (8) css
定位方式分类—汇总
(1)id name class_name :为元素属性定位
(2)tag_name:为元素标签定位
(3)link_text 、 partial_link_text:为超链接定位(a标签定位)
(4)css:为css选择器定位
id 定位
前提:必须有id属性
id定位方法:find_element_by_id()
自动导包:方法名+ctrl+Alt+空格
id定位实现步骤分析
// (1) 导入selenium包
from selenium import webdriver
// (2)导入time包
from time import sleep
// (3)实例化谷歌浏览器
driver=webdriver.Chrome(service_log_path="D:\\chromedriver_service.log")
// (4)打开注册百度
driver.get("dat01\\A.html")
注意:
\:反斜杠为转义字符,所以必须为2个\\
或者:
url=r"day01\A.html"
被r修饰的字符串,字符串中的转义符不做转义使用
/: 斜杠 5/3
//:目录结构
// (5)调用id定位方式
var ele=driver.find_element_by_id("kw")
// (6)使用send_keys() 方法发送数据
ele.send_keys("hh")
// (7) 暂停3秒
sleep(3)
// (8) 关闭浏览器
driver.quit()
name 定位
前提:元素有name属性来定位
name的定位方法:find_element_by_name()
name定位实现步骤分析 :参考id定位
class_name 定位
前提:元素有class属性来定位
class的定位方法:find_element_by_class_name()
class_name定位实现步骤分析 :参考id定位
tag_name 定位
tag_name的定位方法:find_element_by_tag_name() 返回符合条件的第一个标签
tag_name定位实现步骤分析 :参考id定位
tag_name 定位
tag_name的定位方法:find_element_by_tag_name() 返回符合条件的第一个标签
tag_name定位实现步骤分析 :参考id定位
link_text 定位
说明:link_text是专门用来定位超链接文本(<a>标签</a>)
link_text的定位方法:
(1) 方法:find_element_by_link_text() 返回符合条件的第一个标签
(2) 说明:需要传入a标签全部文本(访问新浪网站)
link_text 定位实现步骤分析 :参考id定位
click():为单击方法
如:driver.find_element_by_link_text(“访问 新浪 网站”).click()
partial_link_text()
说明:partial_link_text定位是对link_text定位的补充
partial_link_text 为模糊匹配,link_text为全部匹配
partial_link_text定位方法:
(1) 方法:find_element_by_partial_link_text()
(2) 说明:需要传入a标签局部文本能表达唯一性
partial_link_text 定位实现步骤分析 :参考id定位
find_element[s]_by_xxx()
作用:(1) 查找定位所有符合条件的元素
(2) 返回的定位元素格式为数组(列表)格式
说明:列表数据格式的读取需要指定下标(下标从0开始)
操作(tag_name)
使用tag_name获取第二个元素(密码框):
driver.find_elements_by_tag_name(“input”)[1].send_keys(“123456”)
Xpath()
1、什么是Xpath?
Xpath即为XML Path的简称,它是一种用来确定XML Path的简称,它是一种用来确定XML文档中某部分位置的语言
HTML可以看做是XML的一种实现,所以selenium用户可以使用这种强大的语言在web应用中定位元素
XML:是一种标记语言,用来数据的存储和传递,后缀.xml结尾
提示:Xpath为强大的语言,那是因为它有非常灵活的策略
2、Xpath的定位策略
(1) 路径——定位
绝对路径
相对路径
(2) 利用元素属性——定位
(3) 层级与属性结合——定位
(4) 属性与逻辑结合——定位
3、Xpath定位方法
方法:driver.find_element_by_Xpath()
(1) 路径(绝对路径、相对路径)
绝对路径:从最外层元素到指定元素之间所有经过元素层级 如:/html/body/div/p[2]
相对路径:从第一个符合条件元素开始(一般配合属性来区分) 如://input[@id="userA"]
(2) 利用元素属性
说明:快速定位元素,利用元素唯一属性
示例:*[@id="userA"]
(3) 层级与属性结合
说明:要找的元素没有属性,但是它的父级有
示例://*[@id="telA" and @class="telA"]
Xpath延伸:
(1) *[text()==“xxx”] 文本内容是XXX的元素
(2) *[starts-with(@attribute,‘xxx’)] 属性以XXX开头的元素
(3) *[contains(@attribute,‘xxx’)] 属性中含有XXX的元素
css定位
css是一种语言,它是用来描述HTML和XML的元素显示样式
css语言书写的两个格式:
(1) 写在HTML语言中<style type="text/css">
(2) 写在单独文件中 后缀为.css
css语言中有css选择器(不同的策略选择元素),在selenium中也有使用这种选择器
css定位方法:driver.find_element_by_css_selector()
css定位常用策略(方式)
(1)id选择器 (2)class选择器 (3)元素选择器
(4)属性选择器 (5)层级选择器
(1)id选择器
说明:根据元素的id属性来选择 id选择器必须使用#来修饰
格式:#id
如:#userA 选择id属性值为userA的所有元素
(2)class选择器
注意:class选择器必须以 . 来修饰,必须有class属性
格式:.userA
(3) 元素选择器
说明:根据元素的标签名选择 如:div
(4) 属性选择器
说明:根据元素的属性名和值来选择
如:[type="password"]
(5) 层级选择器
说明:根据元素的父子关系来选择
格式:p>input 返回所有p元素下的所有的input元素
提示:> 可以使用空格代替
css延伸
(1)input[type^=‘p’] 说明:type属性以p字母开头的元素
(2)input[type$=“d”] 说明:type属性以d字母结束的元素
(3)input[type*=“w”] 说明:type属性包含w字母的元素
另一种写法-----延伸
说明:第二种方法使用By类封装的方法,所以需要导入By类包
(1) 导入By类
导包:from selenium.webdriver.common.by import By
(2) By类的方法
方法:find_element(By.ID,"userA")
备注:需要两个参数,第一个参数为定位的类型由By提供,第二个参数为定位的具体方式
示例:
1、driver.find_element(By.CSS.SELECTOR,"#emailA").send_keys("123@126.com")
2、driver.find_element(By.XPATH,"//*[@id="emailA"]").send_keys("123@126.com")
3、driver.find_element(By.ID,"userA").send_keys("123@126.com")
4、driver.find_element(By.NAME,"telA").send_keys("123")
5、driver.find_element(By.TAG_NAME,"input").send_keys("123")
6、driver.find_element(By.CLASS_NAME,"telA").send_keys("123")
7、driver.find_element(By.LINK_TEXT,"访问 新浪 网站").click()
8、driver.find_element(By.PARTIAL_LINK_TEXT,"访问").click()
总结:虽然find_element_by_xxx()和find_element(By.xxx,"")方法一样,但是webdriver推荐find_element_by_xxx()这种方法