Web自动化测试

谷歌最新驱动下载

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的值>

补充:

  1. input[type^='p'] 说明:type属性以p字母开头的元素
  2. input[type$='d'] 说明:type属性以d字母结束的元素
  3. input[type*='w'] 说明:type属性包含w字母的元素
  4. input[type~='value'] 说明: type属性包含value的元素
  5. 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封装其他操纵元素的方法

WebDri

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生如梦亦如幻唯心在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值