UI自动化测试之一(元素属性、多元素处理)
一、UI自动化测试
(一)、简述
基于WEB的UI的自动化测试框架 支持主流的编程语言(Python,java,c#,php,js),支持针对主流的浏览器进行UI的自动化测试(EDGE,Chrome,Firefox)。
selenium2.0=seleium1.0+webdriver
目前是selenium4.0
(二)、python下selenium的环境搭建
1、下载chrome的浏览器
2、控制台下载pip install selenium 插件
3、下载与浏览器匹配的驱动文件
(1)、查看浏览器版本 105.0.5195.102(正式版本) (64 位)
(2)、打开http://chromedriver.storage.googleapis.com/index.html网址,下载相对应的驱动文件
4、管理员身份启动driver
5、把它配置到path环境变量中(放在python目录下即可)
(三)、元素属性
1、找到元素的属性,然后才能够定位到它,下来针对它来进行各种UI交互的操作。
2、元素属性(8种)
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,NAME,CLASS_NAME,当这三个都不可行的话在使用XPATH
(1)、ID
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(3)
driver.find_element(By.ID,'kw').send_keys('无涯 接口测试')
time.sleep(3)
driver.find_element(By.ID,'su').click()
time.sleep(3)
driver.close()
思路:自行打开百度首页,根据他的ID元素信息进行UI交互对‘无涯 接口测试’输入到搜索框并点击搜索,在3秒后关闭浏览器
(2)、NAME
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(3)
driver.find_element(By.NAME,'wd').send_keys('无涯 接口测试')
time.sleep(3)
driver.find_element(By.ID,'su').click()
time.sleep(3)
driver.close()
(3)、CLASS_NAME
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(3)
driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('无涯 接口测试')
time.sleep(3)
driver.find_element(By.ID,'su').click()
time.sleep(3)
driver.close()
(4)、XPATH(右键选定的内容,copy,选择copy XPATH)
XPATH
Full XPATH(当时用XPATH的时候,ID是动态的,那么使用fullpath(被定位元素属性的完整路径) 右键选定的内容,点击copy 选择copy full XPATH)
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(3)
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('无涯 接口测试')
time.sleep(3)
driver.find_element(
By.XPATH,'/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input').click()
time.sleep(3)
driver.close()
(5)、css(基于样式,右键选定的内容,点击copy,选择Copy selector)
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(3)
driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('无涯 接口测试')
time.sleep(3)
driver.find_element(
By.CSS_SELECTOR,'#su').click()
time.sleep(3)
driver.close()
(6)、超链接
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(3)
#精确超链接匹配
driver.find_element(By.PARTIAL_LINK_TEXT,'新闻').click()
time.sleep(3)
#模糊匹配
driver.find_element(By.PARTIAL_LINK_TEXT,'闻').click()
time.sleep(3)
time.sleep(3)
driver.close()
(7)、tagname
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/tagTest.html')
time.sleep(2)
driver.find_element(By.TAG_NAME,'input').send_keys('admin')
time.sleep(3)
driver.close()
(四)、多个元素定位
有单个为什么还有多个元素?
这是因为,当开始写的ID,name,class_name一模一样的时候,这个时候无法区分,那么只能使用多个元素定位的方式
单个元素定位:find_element()
多个元素定位:find_elements()
多个元素的定位方式使用?
他获取的对象是一个列表,我们可以被定位的元素属性在列表中是第几位,根据它的 索引信息来定位它。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('http://baidu.com')
time.sleep(2)
tags=driver.find_elements(By.TAG_NAME,'input')
tags[7].send_keys('admin')
time.sleep(3)
driver.close()
实战
需求:在网页自动输出账户和密码
源代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>
用户名:<input type="text" id="asd" placeholder="请输入用户名">
密码:<input type="password" id="asd" placeholder="请输入用户名">
</p>
</body>
</html>
操作:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/tagTest(1).html')
time.sleep(2)
iads=driver.find_elements(By.TAG_NAME,'input')
iads[0].send_keys('username')
iads[1].send_keys('password')
time.sleep(4)
driver.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库