4.20 学习笔记

一、什么是 web 自动化测试

  • web 自动化测试:通过代码替换手工对网页进行的测试
  • UI 自动化测试:web 自动化 + app 自动化测试

二、什么是 selenium

  • selenium 是企业最主流的 web 自动化测试框架,也是中高级测试人员必备的测试框架之一
  • selenium 的三大组件:
    1. IDE 浏览器插件:功能为录屏(将浏览器操作转化为代码)
    2. webdriver:功能为提供大量方法,实现对浏览器的各种操作(点击、输入、拖动......)
    3. Grid 分布式:功能为实现在同一浏览器执行多条用例

三、web 自动化测试环境的搭建

  1. 安装 Python 环境及 pycharm 集成开发工具(前面已经都安装好了)
  2. 安装 selenium
    • dos 命令:pip install -U selenium
  3. 下载客户端浏览器
  4. 下载与之对应的浏览器驱动(客户端浏览器的版本必须与对应浏览器驱动的版本一致

四、html 及常用的标签

  1. 什么是 html:超文本语言,前端脚本语言(网页),超文本语言由很多一对对的标签组成
  2. html 的基本组成结构

<html>

<head>

<title>网页标题</title>

</head>

<body>

网页内容

</body>

</html>

3.html 的常用标签

input标签:表单标签,标签的type属性值不一样,则元素类型也不一样

  • div标签:用来页面布局,在 div 下面可以嵌套更多的元素的标签对
  • img:图片标签
  • a:超链接标签
  • form:表单标签
  • ......

应用:例题一

import time

from selenium import webdriver #

from selenium.webdriver.common.by import By #
#打开浏览器
driver = webdriver.Chrome()
#加载项目地址

driver.get("https://www.baidu.com/")

driver.get("https://www.hao123.com/")
find_element() #返回一个元素
find_elements(定位方法,定位语句) #找一组元素 ,返回一组元素,返回的是列表

class By:

"""Set of supported locator strategies."""

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属性定位,id属性值唯一**

baidu_sous = driver.find_element(By.ID,"chat-textarea")

# #定位方法二:通过name属性定位,name属性值唯一

baidu_sous = driver.find_element(By.NAME,"wd")

baidu_sous.send_keys("火影忍者")

# #定位方法三:通过标签定位(基本不用,一般不会只通过标片进行定位,一般进行组合定位)

baidu_sous = driver.find_element(By.TAG_NAME,"input")

#定位方法四:通过class属性定位,class属性值唯一

baidu_sous = driver.find_element(By.CLASS_NAME,"chat-input-textarea chat-input-scroll-style")

# #定位方法五:通过链接文本定位 针对a标签进行定位

news_element = driver.find_element(By.LINK_TEXT,"新闻")

# 点击

news_element.click()

# #定位方法六:通过部分链接文本定位 针对a标签进行定位

news_element = driver.find_element(By.PARTIAL_LINK_TEXT,"地")

news_element.click()

#定位方法七:通过xpath定位

# #1.通过绝对路径定位,开头是/

#/html/body/div1/div2/div3/div/div/div2/div/div/div/div/div1/div4/div1/div2/textarea

baidu_sous = driver.find_element(By.XPATH,"/html/body/div1/div2/div3/div/div/div2/div/div/div/div/div1/div4/div1/div2/textarea")

baidu_sous.send_keys("火影忍者")

# 2.通过相对路径定位

# 相对路径:是从某个路径开始的,开头是//

baidu_sous = driver.find_element((By.XPATH,"//div@id='chat-input-container'/textarea"))

baidu_sous.send_keys("火影忍者")

hao123_sous = driver.find_element(By.XPATH,"//form/div2/input1")

# #3.兄弟标签 通过标签加索引(索引从1开始)

hao123 = driver.find_element(By.XPATH,"//div@id='s-top-left'/a2")

hao123.click()

# # 4.标签@属性名='属性值'

#多属性定位 标签@属性名1='属性值1' and @属性名2='属性值2'

# hao123_sous = driver.find_element(By.XPATH,"//input@name='word'")

hao123_sous = driver.find_element(By.XPATH,"//input@name='word' and @data-hook='searchInput'")

#5. 通过部分属性值定位 标签+属性

# (1)标签substring(@属性名,3)='字符串' 返回从参数1字符串中,某个位置开始截取,截取到最后

hao123_sous = driver.find_element(By.XPATH,"//inputsubstring(@name,3)='rd'")

# (2)标签contains(@属性名/方法,'部分属性值')

hao123_sous = driver.find_element(By.XPATH,"//inputcontains(@name,'rd')")

#6. (1)通过文本定位 //标签text()="文本内容"

hao123_tianq = driver.find_element(By.XPATH,"//atext()='七日天气'")

hao123_tianq.click()

(2)通过部分文本进行定位

hao123_tianq = driver.find_element(By.XPATH,"//*contains(text(),'七日')")
hao123_tianq.click()

#定位方法八:通过css选择器定位

#发送

hao123_sous.send_keys("火影忍者")

time.sleep(5) #休眠5秒
driver.close()

例题二

from selenium import webdriver

from selenium.webdriver.common.by import By

import time

# 打开浏览器

driver = webdriver.Chrome()
# 加载项目地址,打开京东

driver.get("https://re.m.jd.com/page/homelike")
#代码运行比页面加载快,所以要等待
#强制等待3秒

time.sleep(3)
#智能等待
# (1)隐式等待

driver.implicitly_wait(10)
# (2)显式等待

jd_goods = driver.find_elements(By.XPATH,"//ul@class='service-bd'/li1/div@class='first-cate-container'/a")

jd_goods1 = jd_goods0

jd_goods1.click()

相关推荐
FreakStudio1 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663673 小时前
使用 Python 从零创建 Word 文档
python
Csvn7 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽8 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户5569188175310 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
LinXunFeng21 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
兵慌码乱1 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi001 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用