课程涵盖

阶段一:测试基础 第001-046集

阶段二:AI手工测试 第047-142集

阶段三:Linux数据库 第143-209集

阶段四:Python编程 第210-306集

阶段五:AI自动化测试WEB 第307-375集

阶段六:Git+持续集成 第376-393集

阶段七:AI自动化测试APP 第394-432集

307.UI自动化

认识自动化测试

测试设计

测试执行

实施自动化测试前置条件

UI自动化测试执行时机

        需在手工测试之后

UI自动化测试核心作用和劣势

Web自动化测试

        浏览器自动化测试/APP自动化测试

01.selenium介绍

308.selenium介绍

API:应用程序接口

python driver chrome

02.selenium环境搭建

309.selenium环境搭建

所以,开发环境需要装,selenium需要装,浏览器驱动也要装,还有浏览器也需要

#1.导包
import time
from selenium import webdriver
#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome() #打开chrome浏览器
#3.输入网址
driver.get("http://www.itheima.com/")
#4.页面操作
#5.等待2秒
time.sleep(3)
#6.推出浏览器
driver.quit()

310.selenium环境测试优化

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
#2.打开浏览器(创建浏览器驱动对象)
path = r"C:\Users\Administrator\AppData\Local\Programs\Python\Python310\chromedriver.exe"
ser = Service(executable_path=path) #CHROME浏览器驱动服务对象
driver = webdriver.Chrome(service=ser) #打开chrome浏览器
#3.输入网址
driver.get("http://www.itheima.com/")
#4.页面操作
#5.等待2秒
time.sleep(3)
#6.推出浏览器
driver.quit()

03.selenium入门案例

311.selenium入门案例

代码功能:启动浏览器,打开黑马程序员首页,暂停3秒后,关闭浏览器

#1.导包
import time
from selenium import webdriver
#2.创建浏览器对象
driver = webdriver.Chrome()
#3.访问网页
driver.get("https://www.baidu.com")
#4.等待3秒
time.sleep(2)
#5.退出浏览器
driver.quit()

04元素定位工具

312.页面技术构成及简介

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()
#3.打开网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作
#输入操作

#点击操作

#5.等待页面加载完成
time.sleep(2)
#6.关闭浏览器
driver.quit()
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()
#3.打开网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作
#输入操作(涉及到元素定位)
元素对象.Send_keys("输入内容")
#点击操作
元素对象.click()
#5.等待页面加载完成
time.sleep(2)
#6.关闭浏览器
driver.quit()
HTML介绍

        html负责网页架构

        css负责网页的样式和美化

        js:负责网页的行为

<style>里就是CSS层叠样式

开始一双标签好,结束一双标签,结束的这一双标签号里有个“/”

举例
<div class="loginsum_cm">

前置:了解前端基础,认识什么是标签名,什么是属性名,什么是属性值,什么是文本内容即可。

前端页面基本构成骨架

<!>感叹开头代表注释

head的内容为:

body的内容为:

所以以后测试的很多内容直接找body里面的内容就可以

313.页面元素的定位方式

找元素需要进行元素定位

&nbsp; 是 HTML 中的一个字符实体(Character Entity),它的全称是 Non-Breaking Space(不换行空格)

        利用元素属性时优选id,name和class_name会重复

        标签名很容易重复,一般不经常使用

        超链接定位只适用于文本信息(文本信息为一对尖括号之间的信息,例如:<a>黑马程序员</a>

314.按照ID定位元素

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.打开网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作
ele = driver.find_element(by=By.ID,value="username")
#输入操作(涉及到元素定位)
ele.send_keys("13800000001")
#点击操作
#ele.click()
#5.等待页面加载完成
time.sleep(2)
#6.关闭浏览器
driver.quit()

315.按照name和class定位

有ID选ID,没有ID就选NAME

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.打开网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作
#4.1获取元素对象:用户名
ele = driver.find_element(by=By.ID,value="username")
#输入操作(涉及到元素定位)
ele.send_keys("13800000001")
#4.2获取元素对象:密码
driver.find_element(by=By.NAME,value="password").send_keys("123456")
#点击操作
time.sleep(2) #等待2秒
driver.find_element(by=By.CLASS_NAME,value="J-login-submit").click()#点击登录按钮
#ele.click()
#5.等待页面加载完成
time.sleep(2)
#6.关闭浏览器
driver.quit()
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.打开网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作
#4.1获取元素对象:用户名
ele = driver.find_element(by=By.ID,value="username")
#输入操作(涉及到元素定位)
ele.send_keys("13800000001")
#4.2获取元素对象:密码
driver.find_element(by=By.NAME,value="password").send_keys("123456")
#4.3获取元素对象:验证码
driver.find_element(by=By.ID,value="verify_code").send_keys("8888")#验证码
#4.4获取元素对象:登录按钮
#点击操作
time.sleep(2) #等待2秒
driver.find_element(by=By.CLASS_NAME,value="J-login-submit").click()#点击登录按钮
#ele.click()
#5.等待页面加载完成
time.sleep(12)
#6.关闭浏览器
driver.quit()

316.按照超链接定位元素

重名太多,不要用标签名

超链接用的是文本信息

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("https://hmshop-test.itheima.net/index.php")

#4.页面操作
#4.1获取元素对象:用户名
#超链接方式定位
# driver.find_element(by=By.LINK_TEXT,value="登录").click() #或者是:driver.find_element(By.LINK_TEXT,"登录").click()
#局部超链接方式定位
driver.find_element(by=By.PARTIAL_LINK_TEXT,value="录").click() #或者是:driver.find_element(By.PARTIAL_LINK_TEXT,"登录").click()

#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()

317.CSS选择器定位元素

ID选择器在ID属性值前加“#”,没有ID用class时,属性值前加“.”,标签名什么也不加,属性选择器则为“value=“[属性名='属性值']”

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")

#4.页面操作
driver.find_element(by=By.CSS_SELECTOR,value="#username").send_keys("13810001")
# driver.find_element(by=By.CSS_SELECTOR,value='[type="password"]').send_keys("123456")
#属性组合
driver.find_element(by=By.CSS_SELECTOR,value='[class="text_cmu"][type="password"]').send_keys("123456")

#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()

318.CSS选择器补充说明

如果css选择中class的东西比较多

<div class="text_uspa check_cum">

中间有空格代表有两个值

这时应该怎么写?

driver.find_element(By.CSS_SELECTOR,".text_uspa.check_cum")

#CSS元素层级定位
#loginform > div > div.login_bnt > a
#ID选择器 子代组合器(>) 标签 子代组合器(>) 标签+类名复合选择器 子代组合器(>)  标签选择器

#loginform 是ID值

> 代表上下级父子关系

div 就是div标签

div.login_bnt 代表class属性

        格式:form(标签名).ID > div > 属性名字.class

总结:

        CSS:层叠样式表,一种用来描述文档在网页上如何呈现样式的语言

                如果使用CSS的时候,class属性值有多个,value使用:

.第一个属性值.第二个属性值

                如果使用CSS的时候,有复杂的层级关系,value使用:

#ID属性值 > 标签名 > 标签名.class属性值

后代关系不需要大于号,如果想跳过中间层直接不写即可

#ID属性值  标签名.class属性值

319.xpath定位元素

xml没有单标签,是双标签,而且标签名字可以自定义

xtml是一种特殊的标签语言

路径+属性定位路径用的一定是相对路径

###############################xpath定位元素##############################

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.输入网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作

#输入框
driver.find_element(By.XPATH,"//input[@id='username']").send_keys("13800000001")
#driver.find_element(By.XPATH,"//*[@id='username']").send_keys("13800000001")
driver.find_element(By.XPATH,"//input[@name='password']").send_keys("123456")

#5.等待2秒
time.sleep(2)
#6.关闭浏览器
driver.quit()


鼠标右键

320.xpath定位补充说明

路径+文本

文本中带空格的最好不要用,拷贝出来有问题

错误示范:

driver.find_element(By.XPATH,'//*[TEXT()="登    录"]').click()

有空格就不要用文本定位了,

正确示范:

###############################xpath定位元素##############################

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.输入网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
#4.页面操作

#输入框
driver.find_element(By.XPATH,"//input[@id='username']").send_keys("13800000001")
#driver.find_element(By.XPATH,"//*[@id='username']").send_keys("13800000001")
driver.find_element(By.XPATH,"//input[@name='password']").send_keys("123456")
driver.find_element(By.XPATH,'//*[text()="立即注册"]').click()

#5.等待2秒
time.sleep(2)
#6.关闭浏览器
driver.quit()

绝对路径除非万不得已,否则尽量不要用(缺点:写起来比较长,不稳健)

超链接只针对a标签,也就是超链接标签

xpath性能损耗大,因为涉及了路径

321.登录成功文本获取

#这么写会报错
driver.find_element(By.CLASS_NAME,value="red userinfo")
#因为CLASS_NAME默认只能写一个值,写两个值就会报错
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")

#4.页面操作
#4.1获取元素对象:用户名
ele = driver.find_element(by=By.ID,value="username")
ele.send_keys("13800000001")
#4.2获取元素对象:密码
driver.find_element(by=By.NAME,value="password").send_keys("123456")
#4.3获取元素对象:验证码
driver.find_element(by=By.ID,value="verify_code").send_keys("8888") #输入验证码
#4.4获取元素对象:登录按钮
time.sleep(2) #等待两秒
driver.find_element(by=By.CLASS_NAME,value="J-login-submit").click() #点击登录按钮
#元素对象.click()
time.sleep(2) #等待两秒
#获取登录结果:登录的昵称

#####以下方法二选一
#方法一
result= driver.find_element(by=By.XPATH,value="//*[text()='测试帐号']").text #获取当前元素的文本内容:元素对象.text
print(result)
#方法二
result = driver.find_element(By.CSS_SELECTOR,value=".red.userinfo").text
print(result) #输出登录结果
##################result

#断言
assert "测试帐号" == result

#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()

322.添加商品脚本1

1.元素定位方法
driver.find_element(by=By.所要选择定位方式的类属性,value=所选择定位方式所要求的值)
2.模拟用户点击
element.click()
3.模拟用户输入
element.send_keys(输入的文本信息)
4.等待元素出现
time.sleep(秒数)
5.获取元素文本信息
element.txt

06.新增商品成功

在 HTML 中,<a> 标签(全称为 Anchor,即“锚”)是用于定义超链接的核心标签。它的主要作用是将一个文档链接到另一个文档、同一文档的不同位置,或者触发特定的操作(如下载文件、发送邮件等)。

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()

#3.输入网页
driver.get("http://192.168.74.129/index.php/Admin/Admin/login")

#4.页面操作
#4.1登录
driver.find_element(By.NAME,"username").send_keys("admin")
driver.find_element(By.NAME,"password").send_keys("123456")
driver.find_element(By.ID,"vertify").send_keys("8888")
driver.find_element(By.NAME,"submit").click()
#4.2点击商城
time.sleep(1) 
driver.find_element(By.LINK_TEXT,"商城").click() #LINK_TEXT只针对a标签,所以"添加商品"不能使用这个
#4.3点击添加商品
time.sleep(1) 
driver.find_element(By.XPATH,"//*[text()='添加商品']").click()

323.frame切换处理

什么是frame

问题如下:

解释

如图所示,选中frame,右边整个区域都被选中,证明右边是一个独立的页面

涉及一个叫做frame切换的技术:driver.switch_to.frame(frame_reference)

frame_reference:iframe标签元素对象

窗口最大化:webdriver.maximize_window()

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()

#3.输入网页
driver.get("http://192.168.74.129/index.php/Admin/Admin/login")
driver.maximize_window() #浏览器最大化窗口
#4.页面操作
#4.1登录
driver.find_element(By.NAME,"username").send_keys("admin")
driver.find_element(By.NAME,"password").send_keys("123456")
driver.find_element(By.ID,"vertify").send_keys("8888")
driver.find_element(By.NAME,"submit").click()
#4.2点击商城
time.sleep(1) 
driver.find_element(By.LINK_TEXT,"商城").click() #LINK_TEXT只针对a标签,所以"添加商品"不能使用这个
#4.3点击添加商品
time.sleep(1) 
#切换frame
fr = driver.find_element(By.ID,"workspace")
driver.switch_to.frame(fr)
#点击添加商品
time.sleep(1) 
driver.find_element(By.XPATH,"//*[text()='添加商品']").click()

324.web自动化_day01总结

325.添加商品下拉框处理

上节课代码回顾:
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver= webdriver.Chrome()

#3.输入网页
driver.get("http://192.168.74.129/index.php/Admin/Admin/login")
driver.maximize_window() #浏览器最大化窗口

#4.页面操作
#4.1登录
driver.find_element(By.NAME,"uesrname").send_keys("admin")
driver.find_element(By.NAME,"password").send_keys("123456")
driver.find_element(By.ID,"vertify").send_keys("8888")
driver.find_element(By.NAME,"submit").click()
#点击商城
time.sleep(1)
driver.find_element(By.LINK_TEXT,"商城").click() 
#4.3点击添加商品
time.sleep(1) 
#切换frame
fr = driver.find_element(By.ID,"workspace")
driver.switch_to.frame(fr)

#注意,需要一层一层进,一层一层出

#点击添加商品
driver.find_element(By.XPATH,"//*[text()='添加商品']").click()
#返回原来页面(从frame中出来)
driver.switch_to.default_content()

#5.等待2秒
time.sleep(2)
#6.退出浏览器
driver.quit()


如何使用下拉框
#1.导包
from selenium.webdriver.support.select import Select

#2.创建select对象
select=Select(element)

#3.选择选项
select.select_by_value(value) #根据选项value属性值
select.select_by_visible_text(text) #根据选项文本

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select 

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("http://192.168.74.129/index.php/Admin/Admin/")
driver.maximize_window() #最大化窗口

#4.页面操作
#4.1登录
driver.find_element(by=By.NAME,value="username").send_keys("admin")
driver.find_element(by=By.NAME,value="password").send_keys("123456")
driver.find_element(by=By.ID,value="vertify").send_keys("8888")
driver.find_element(by=By.NAME,value="submit").click()
#4.2 点击商城
time.sleep(1)
driver.find_element(by=By.LINK_TEXT,value="商城").click()
#4,3 点击添加商品
time.sleep(1)
#切换frame
fr = driver.find_element(By.ID,value="workspace")
driver.switch_to.frame(fr)
driver.find_element(by=By.XPATH,value='//*[text()="添加商品"]').click()

# #返回原来的界面
# driver.switch_to.default_content() #返回原来的界面

#填写商品信息
#商品名词
driver.find_element(by=By.NAME,value="goods_name").send_keys("测试商品test01")

#选择种类
select1 = Select(driver.find_element(by=By.ID,value="cat_id"))
select1.select_by_value("31") #value属性值

select2 = Select(driver.find_element(By.ID,"cat_id_2"))
select2.select_by_visible_text("运营商") #文本内容

select3 = Select(driver.find_element(By.ID,"cat_id_3"))
select3.select_by_index(1) #下标

#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()
326.添加商品完整实现
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select 

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("http://192.168.74.129/index.php/Admin/Admin/")
driver.maximize_window() #最大化窗口

#4.页面操作
#4.1登录
driver.find_element(by=By.NAME,value="username").send_keys("admin")
driver.find_element(by=By.NAME,value="password").send_keys("123456")
driver.find_element(by=By.ID,value="vertify").send_keys("8888")
driver.find_element(by=By.NAME,value="submit").click()
#4.2 点击商城
time.sleep(1)
driver.find_element(by=By.LINK_TEXT,value="商城").click()
#4,3 点击添加商品
time.sleep(1)
#切换frame
fr = driver.find_element(By.ID,value="workspace")
driver.switch_to.frame(fr)
driver.find_element(by=By.XPATH,value='//*[text()="添加商品"]').click()

# #返回原来的界面
# driver.switch_to.default_content() #返回原来的界面

#填写商品信息
#商品名词
driver.find_element(by=By.NAME,value="goods_name").send_keys("测试商品test01")

#选择种类
select1 = Select(driver.find_element(by=By.ID,value="cat_id"))
select1.select_by_value("31") #value属性值

select2 = Select(driver.find_element(By.ID,"cat_id_2"))
select2.select_by_visible_text("运营商") #文本内容

select3 = Select(driver.find_element(By.ID,"cat_id_3"))
select3.select_by_index(1) #下标
#填写商品价格
driver.find_element(By.NAME,"shop_price").send_keys("99")
driver.find_element(By.NAME,"market_price").send_keys("99")
#是否包邮
driver.find_element(By.ID,"is_free_shipping_label_1").click()
#确认提交
driver.find_element(By.ID,"submit").click() #点击提交按钮


#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()

327.元素的智能等待介绍

强制等待

        time.sleep()

隐式等待

        只需要设置一次,针对全局生效,刚开始打开浏览器时用

webdriver.implicitly_wait(等待的秒数)

显式等待

        针对局部

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select 
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("http://192.168.74.129/index.php/Admin/Admin/")
#driver.implicitly_wait(10) #全局等待,隐式等待
driver.maximize_window() #最大化窗口
#隐式等待

#4.页面操作
#4.1登录
driver.find_element(by=By.NAME,value="username").send_keys("admin")
driver.find_element(by=By.NAME,value="password").send_keys("123456")
driver.find_element(by=By.ID,value="vertify").send_keys("8888")
driver.find_element(by=By.NAME,value="submit").click()
#4.2 点击商城
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.LINK_TEXT,"商城"))).click()
#4,3 点击添加商品
time.sleep(1)
#切换frame
fr = driver.find_element(By.ID,value="workspace")
driver.switch_to.frame(fr)
driver.find_element(by=By.XPATH,value='//*[text()="添加商品"]').click()

# #返回原来的界面
# driver.switch_to.default_content() #返回原来的界面

#填写商品信息
#商品名词
driver.find_element(by=By.NAME,value="goods_name").send_keys("测试商品test01")

#选择种类
select1 = Select(driver.find_element(by=By.ID,value="cat_id"))
select1.select_by_value("31") #value属性值

select2 = Select(driver.find_element(By.ID,"cat_id_2"))
select2.select_by_visible_text("运营商") #文本内容

select3 = Select(driver.find_element(By.ID,"cat_id_3"))
select3.select_by_index(1) #下标
#填写商品价格
driver.find_element(By.NAME,"shop_price").send_keys("99")
driver.find_element(By.NAME,"market_price").send_keys("99")
#是否包邮
driver.find_element(By.ID,"is_free_shipping_label_1").click()
#确认提交
driver.find_element(By.ID,"submit").click() #点击提交按钮


#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()

328.隐式等待和显示等待总结

329.鼠标悬停的处理

#导包
from selenium.webdriver import ActionChains
#实例化鼠标
action = ActionChains(driver)
#调用鼠标方法
action.move_to_element(element)
#执行鼠标操作
action.perform()
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select 
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
driver.maximize_window() #最大化窗口

#4.页面操作
#4.1登录成功
#获取元素对象:用户名
ele = driver.find_element(by=By.ID,value="username")
##输入操作
ele.send_keys("13800000001")
#获取元素对象:密码
driver.find_element(by=By.NAME,value="password").send_keys("123456")
#获取元素对象:验证码
driver.find_element(by=By.ID,value="verify_code").send_keys("8888")
#点击操作
ele = (WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.CLASS_NAME,"J-login-submit"))))
ele.click()
#4.2 进入账户设置
#//span[text()="账户设置"]
ele2 = (WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH,"//span[text()='账户设置']"))))
action = ActionChains(driver)
action.move_to_element(ele2)
action.perform()
#点击收货地址
driver.find_element(By.XPATH,value='//a[2][text()="收货地址"]').click()
#4.3 添加收货地址

#5.等待两秒
time.sleep(2)

#6.退出浏览器
driver.quit()

330.添加收货地址代码

如果不最大化的话,可能很多被挡住的按钮他就找不到了

###################################鼠标悬停#############################
#1.导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #这是一个异常条件的工具
from selenium.webdriver.common.action_chains import ActionChains

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()

#3.输入网页
driver.get("https://hmshop-test.itheima.net/Home/user/login.html")
driver.implicitly_wait(10) #隐式等待10秒
#如果不最大化的话,可能很多被挡住的按钮他就找不到了
driver.maximize_window() #浏览器最大化窗口

#4.页面操作
#4.1 登录成功
#获取元素对象:用户名
ele = driver.find_element(by=By.ID,value="username")
##输入操作
ele.send_keys("13800000001")
#获取元素对象:密码
driver.find_element(by=By.NAME,value="password").send_keys("123456")
#获取元素对象:验证码
driver.find_element(by=By.ID,value="verify_code").send_keys("8888")
##点击操作
ele1 = WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.CLASS_NAME,"J-login-submit"))) #等待元素加载完成
ele1.click() #点击登录按钮
#4.2 进入账户设置
#通过鼠标悬停找到对应的位置
#span[text()="账户设置"]
ele2 =  WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH,"//span[text()='账户设置']"))) #等待元素加载完成
action = ActionChains(driver) #创建鼠标操作对象
action.move_to_element(ele2)  #调用鼠标悬停方法
action.perform() #执行鼠标操作
#再去点击收货地址

driver.find_element(by=By.XPATH,value='//a[2][text()="收货地址"]').click() #点击收货地址
#点击新增收货地址

driver.find_element(by=By.CLASS_NAME,value="co_blue").click() #点击新增收货地址

#4.3 添加收货地址find_element(by=By.NAME,value=)
driver.find_element(by=By.NAME,value="consignee").send_keys("张三")
driver.find_element(by=By.NAME,value="mobile").send_keys("13800000001")
select1 = Select(driver.find_element(by=By.ID,value="province")) #选择省份
select1.select_by_value("1") #选择省份
select2 = Select(driver.find_element(by=By.ID,value="city")) #选择城市
select2.select_by_visible_text("市辖区") #选择城市
select3 = Select(driver.find_element(by=By.ID,value="district")) #选择区域
select3.select_by_index(1) #选择区域
#详细地址
driver.find_element(by=By.CSS_SELECTOR,value='[PLACEHOLDER="详细地址"]').send_keys("北京市朝阳区")
driver.find_element(by=By.NAME,value='zipcode').send_keys("100000")
time.sleep(1)
driver.find_element(by=By.ID,value='address_submit').click()

#5.等待2秒
time.sleep(12)
#6.退出浏览器
driver.quit()

331.弹框和滚动条处理

处理弹出框

如果用F12能定位到直接找页面元素就可以,这种就是自定义弹出框

获取弹出框对象:

alert = driver.switch_to.alert
处理滚动条

最左上角是零点(0,0)

---------------------------->x轴,右上角坐标为(1920,0)

|

|

|

V

y轴,左下角为(0,1080),右下角为(1920,1080)

动右边滚动条只需要改变y值即可

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.输入网址
driver.get("")
driver.maximize_window()

#4.页面操作
#处理滚动条
js = "window.scrollTo(0,400)"
driver.execute_script(js) #执行js代码
#点击alert按钮
driver.find_element(By.ID,"alerta").click()
#处理弹框信息
time.sleep(2) #等待2秒
alert = driver.switch_to.alert
#获取弹框文本信息
print(alert.text)
#处理按钮
alert.accept() #点击确定按钮
#alert.dismiss() #一个按钮的情况下也可以用这个

#5.等待2秒
time.sleep(2)
#6.退出浏览器
driver.quit()

332.多窗口切换

认识多窗口

多窗口切换方法

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.输入网址
driver.get("")
driver.maximize_window()

#4.页面操作
driver.find_element(By.ID,"fw").click()
#获取当前所有窗口的句柄
handles = driver.window_handles
#切换窗口
driver.switch_to.window(handles[1]) 
#新窗口搜索软件测试
driver.find_element(By.ID,"kw").send_keys("软件测试")

#5.等待2秒
time.sleep(2)
#6.退出浏览器
driver.quit()

333.浏览器其他操作

面试题:自动化测试种遇到过什么常见的问题

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.输入网址
driver.get("")
driver.maximize_window()

#4.页面操作
driver.find_element(By.ID,"fw").click()
#获取当前所有窗口的句柄
handles = driver.window_handles
#切换窗口
driver.switch_to.window(handles[1]) 
#新窗口搜索软件测试
driver.find_element(By.ID,"kw").send_keys("软件测试")
#搜索操作截图
driver.get_screenshot_as_file("软件测试.png")

#5.等待2秒
time.sleep(2)
#6.退出浏览器
driver.quit()
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
#driver就是浏览器对象
driver = webdriver.Chrome()
#3.输入网址
driver.get("")
driver.maximize_window()

#4.页面操作
driver.find_element(By.LINK_TEXT,"百度").click()
#浏览器按钮
#刷新
driver.refresh
#退回
driver.back()
#前进
driver.forward()

#5.等待2秒
time.sleep(2)
#6.退出浏览器
driver.quit()

334.金融项目注册页面

UI自动化核心目的就是回归,回归一般回归核心业务(借款,投资,审核)

首先从基本功能注册开始

注册
# import time
# from selenium import webdriver
# from selenium.webdriver.chrome.service import Service
# from selenium.webdriver.common.by import By

# #2.打开浏览器(创建浏览器驱动对象)
# #driver就是浏览器对象
# driver = webdriver.Chrome()
# #3.输入网址
# driver.get("")
# driver.maximize_window()

# #4.页面操作
# driver.find_element(By.LINK_TEXT,"百度").click()
# #浏览器按钮
# #刷新
# driver.refresh
# #退回
# driver.back()
# #前进
# driver.forward()

# #5.等待2秒
# time.sleep(2)
# #6.退出浏览器
# driver.quit()


#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("http://121.43.169.97:8081/login.html")
driver.maximize_window()

#4.页面操作
#4.1点击注册按钮
driver.find_element(By.LINK_TEXT,"有奖注册").click()
#4.2填写注册信息
driver.find_element(By.ID,"phone").send_keys("13800002701")
driver.find_element(By.ID,"password").send_keys("Aa123456")
driver.find_element(By.ID,"verifycode").send_keys("8888")
#短信验证码操作步骤:点击"获取验证码"-->输入验证码
driver.find_element(By.ID,"get_phone_code").click()
time.sleep(2) #等待2秒
driver.find_element(By.ID,"phone_code").send_keys("666666")
driver.find_element(By.CLASS_NAME,"lg-btn").click() #点击注册按钮
#4.3使用断言判定结果(h标签是文本的标题标签)
time.sleep(2)
result = driver.find_element(By.CSS_SELECTOR,"div.reg-step-last > h1").text
print(result)
assert "注册成功" in result

#5.等待2秒
time.sleep(2)

#6.退出浏览器
driver.quit()

335.点击开通资金托管帐号

#1.导包
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

#2.打开浏览器(创建浏览器驱动对象)
driver = webdriver.Chrome()

#3.输入网址
driver.get("http://121.43.169.97:8081/login.html")
driver.maximize_window()

#4.页面操作
#4.1点击注册按钮
driver.find_element(By.LINK_TEXT,"有奖注册").click()
#4.2填写注册信息
driver.find_element(By.ID,"phone").send_keys("12401222211")
driver.find_element(By.ID,"password").send_keys("Aa123456")
driver.find_element(By.ID,"verifycode").send_keys("8888")
#短信验证码操作步骤:点击"获取验证码"-->输入验证码
driver.find_element(By.ID,"get_phone_code").click()
time.sleep(2) #等待2秒
driver.find_element(By.ID,"phone_code").send_keys("666666")
driver.find_element(By.CLASS_NAME,"lg-btn").click() #点击注册按钮
#点击开通资金托管
ele1 = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CLASS_NAME,"blue")))#显式等待
ele1.click()
#填写姓名和身份证信息
ele2 = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.NAME,"realname")))#显式等待
ele2.send_keys("张三")
driver.find_element(By.NAME,"card_id").send_keys("11011523940101101X")
driver.find_element(By.CSS_SELECTOR,'[value="确认提交"]').click()
#点击立即开通
#有两个class值,用.连起来就行
ele3 = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".btn.ng-scope")))#显式等待
ele3.click()
#切换到新窗口
time.sleep(2) #等待2秒
#新窗口,需要加东西
handles = driver.window_handles
driver.switch_to.window(handles[1]) 
#断言
ele4 = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.TAG_NAME,"body")))#显式等待
result = ele4.text
print(result)
assert "OK" in result

#5.等待2秒
time.sleep(2)

#6.退出浏览器
driver.quit()

336.web自动化_day02总结

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐