谷歌最新驱动下载
Chrome for Testing availability
安装selenium
pip install selenium
selenium案例
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(3)
driver.quit()
元素定位
为什么要学习元素定位方式?
1. 让程序操作指定元素,就必须先找到此元素;
2. 程序不像人类用眼睛直接定位到元素;
3. WebDriver提供了八种定位元素方式
WebDriver 元素定位方式
1. id
2. name
3. class_name
4. tag_name
5. link_text
6. partial_link_text
定位方式分类-汇总:
1). id、name、class_name:为元素属性定位
2). tag_name:为元素标签名称
3). link_text、partial_link_text:为超链接定位(a标签)
4). Xpath:为元素路径定位
5). Css:为CSS选择器定位
案例1
1. 为了更好的学习这八种方式和网络的关系,我们在案例-1注册页面上来练习自动化脚本设计,提高学习效率和
脚本执行速率
2. 语言使用Python
3. 开发工具使用Pycharm
4. selenium使用2.48.0
id定位
实现案例-1需求:
1). 打开注册A.html页面,使用id定位,自动填写(账号A:admin、密码A:123456)
2). 填写完毕后,3秒钟关闭浏览器窗口
实现
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
input01 = driver.find_element(By.ID,"userA")
input01.send_keys("admin")
sleep(3)
input02 = driver.find_element(By.NAME,"passwordA")
input02.send_keys("123456")
sleep(3)
input03 = driver.find_element(By.CLASS_NAME,"telA")
input03.send_keys("123456")
sleep(3)
input04 = driver.find_element(By.TAG_NAME,"input")
input04.send_keys("123456")
sleep(3)
driver.quit()
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# link = driver.find_element(By.LINK_TEXT,"访问 百度 网站") 搜索超链接内容等于访问 百度 网站
link = driver.find_element(By.PARTIAL_LINK_TEXT,"AA") # 搜索超链接内容包含AA
link.click()
sleep(3)
driver.quit()
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
input = driver.find_elements(By.TAG_NAME,"input")
#找出一堆输入框定位到第四个写入值
input[3].send_keys("121231312")
sleep(3)
driver.quit()
xpath、css定位
xpath安装
XPath Helper_2.0.2_Chrome插件下载_极简插件
使用xpath查询id等于userA元素
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
input = driver.find_element(By.XPATH,"//input[@id='userA']")
input.send_keys("121231312")
sleep(3)
driver.quit()
xpath定位策略
1. 路径-定位
1). 绝对路径
2). 相对路径
2. 利用元素属性-定位
3. 层级与属性结合-定位
4. 属性与逻辑结合-定位
定位方法
driver.find_element(By.XPATH,"//input[@id='userA']")
路径(绝对路径、相对路径)
绝对路径:从最外层元素到指定元素之间所有经过元素层级路径 ;如:/html/body/div/p[2]
提示:
1. 绝对路径以/开始
相对路径:从第一个符合条件元素开始(一般配合属性来区分);如://input[@id='userA']
提示:
2. 相对路径以//开始
案例-1
需求:
1). 使用绝对路径和相对路径分别实现,账号A:admin;密码A:123456;自动化脚本设计
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 相对路径
input = driver.find_element(By.XPATH,"//input[@id='userA']")
input.send_keys("1231231")
sleep(3)
# 绝对路径
input02 = driver.find_element(By.XPATH,"/html/body/form/div/fieldset/p[2]/input");
input02.send_keys("121231312")
sleep(3)
driver.quit()
利用元素属性
说明:快速定位元素,利用元素唯一属性;
示例://*[@id='userA']
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 利用元素id查找
input = driver.find_element(By.XPATH,"//input[@id='userA']")
input.send_keys("1231231")
sleep(3)
driver.quit()
层级与属性结合
说明:要找的元素没有属性,但是它的父级有;
示例://*[@id='p1']/input
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_element(By.XPATH,"//*[@id='p1']/input")
input.send_keys("1231231")
sleep(3)
driver.quit()
属性与逻辑结合
说明:解决元素之间个相同属性重名问题
示例://*[@id='telA' and @class='telAa']
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_element(By.XPATH,"//*[@id='telA' and @class='telA' ]")
input.send_keys("1231231")
sleep(3)
driver.quit()
Xpath-延伸
//*[text()="xxx"] 文本内容是xxx的元素
//*[starts-with(@attribute,'xxx')] 属性以xxx开头的元素
//*[contains(@attribute,'Sxxx')] 属性中含有xxx的元素
CSS定位
什么是css
CSS 中选择器是一种模式,用于选择需要添加样式的元素。计算机能够通过CSS选择器定位到相应元素,我们在编写自动化测试脚本时是在不断地找到CSS选择器对应的元素。
CSS中通过各种选择器选择不同的页面元素,完成了颜色、字体、宽高等的设定,既然可以通过CSS选择器完成元素选择及样式设定,则也可利用CSS选择器的规则完成自动化测试脚本中的元素定位。
1. CSS(Cascading Style Sheets)是一种语言,它用来描述HTML和XML的元素显示样式;
2. 在CSS语言中有CSS选择器(不同的策略选择元素),在Selenium中也可以使用这种选择器;
提示:
1. 在selenium中极力推荐CSS定位,因为它比XPath定位速度要快
2. css选择器语法非常强大,在这里我们只学习在测试中常用的几个
CSS定位常用策略 (方式)
1. id选择器
2. class选择器
3. 元素选择器
4. 属性选择器
5. 层级选择器
css选择器语法
基础选择器
备注:某些元素属性有多个值(如class属性),值表现为以空格隔开,使用时需要单个取出使用
取telA或者haha
组合选择器
组合选择器就是同时使用多个基础选择器,从而更好地筛选出目标元素
伪属性选择器
伪属性选择器是指元素在html中实际并不存在该属性,是由css定义的拓展描述属性
ID选择器
说明:根据元素id属性来选择
格式:#id 如:#userA <选择id属性值为userA的所有元素>
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_element(By.CSS_SELECTOR,'#userA')
input.send_keys("1231231")
sleep(3)
driver.quit()
class 选择器
说明:根据元素class属性来选择
格式:.class 如:.telA <选择class属性值为telA的所有元素>
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_element(By.CSS_SELECTOR,'.telA')
input.send_keys("1231231")
sleep(3)
driver.quit()
元素选择器
说明:根据元素的标签名选择
格式:element 如:input <选择所有input元素>
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_elements(By.CSS_SELECTOR,'input')
input[0].send_keys("1231231")
sleep(3)
driver.quit()
属性选择器
说明:根据元素的属性名和值来选择
格式:[attribute=value] 如:[type="password"] <选择所有type属性值为password的值>
补充:
- input[type^='p'] 说明:type属性以p字母开头的元素
- input[type$='d'] 说明:type属性以d字母结束的元素
- input[type*='w'] 说明:type属性包含w字母的元素
- input[type~='value'] 说明: type属性包含value的元素
- input[type=value] 说明: type属性是value的所有元素
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_element(By.CSS_SELECTOR,'[name="userA"]')
input.send_keys("1231231")
sleep(3)
driver.quit()
层级选择器
说明:根据元素的父子关系来选择
格式:element>element 如:p>input <返回所有p元素下所有的input元素>
提示:> 可以用空格代替 如:p input 或者 p [type='password']
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input = driver.find_element(By.CSS_SELECTOR,'p input')
input.send_keys("1231231")
sleep(3)
driver.quit()
元素和浏览器操作方法
元素常用操作方法
1. clear() 清除文本
2. send_keys() 模拟输入
3. click() 单击元素
说明:由于这三个方法非常简单,并且有些之前已经使用过,所以在这里用一个案例一起来讲解
案例-1 用户注册A
需求:
1. 通过脚本执行输入 用户名:admin;密码:123456;电话号码:18611111111;电子邮件:123@qq.com;
2. 间隔3秒后,修改电话号码为:18600000000
3. 间隔3秒,点击注册用户A
4. 间隔3秒,关闭浏览器
5. 元素定位方法不限
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = r"D:\注册A.html"
driver.get(url)
# 层级与属性结合
input01 = driver.find_element(By.ID, 'userA')
input01.send_keys("admin")
sleep(3)
input02 = driver.find_element(By.ID, 'passwordA')
input02.send_keys("123456")
sleep(3)
input03 = driver.find_element(By.ID, 'telA')
input03.send_keys("18611111111")
sleep(3)
input04 = driver.find_element(By.ID, 'emailA')
input04.send_keys("123@qq.com")
sleep(3)
input03.clear()
sleep(3)
input03.send_keys("186000000000")
sleep(3)
button = driver.find_element(By.CSS_SELECTOR, '[type="submitA"]')
button.click()
sleep(100)
driver.quit()
浏览器常用方法
WebDriver操作浏览器常用方法
1. maximize_window() 最大化 --> 模拟浏览器最大化按钮
2. set_window_size(100,100) 浏览器大小 --> 设置浏览器宽、高(像素点)
3. set_window_position(300,200) 浏览器位置 --> 设置浏览器位置
4. back() 后退 --> 模拟浏览器后退按钮
5. forward() 前进 --> 模拟浏览器前进按钮
6. refresh() 刷新 --> 模拟浏览器F5刷新
7. close() 关闭 --> 模拟浏览器关闭按钮(关闭单个窗口)
8. quit() 关闭 --> 关闭所有WebDriver启动的窗口
WebDriver 操作浏览器方式-总结
# 最大化浏览器
driver.maximize_window()
# 刷新
driver.refresh()
# 后退
driver.back()
# 前进
driver.forward()
# 设置浏览器大小
driver.set_window_size(300,300)
# 设置浏览器位置
driver.set_window_position(300,200)
# 关闭浏览器单个窗口
driver.close()
# 关闭浏览器所有窗口
driver.quit()
WebDriver 其他常用的方法
为什么要学习WebDriver其他方法?
1. 如何获取元素大小?
2. 如果获取元素的文本?
3. 如何获取元素属性值?
4. 如果让程序判断元素是否为可见状态?
我们想解决以上问题,就需要学习WebDriver封装其他操纵元素的方法