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/div[1]/div[2]/div[3]/div/div/div[2]/div/div/div/div/div[1]/div[4]/div[1]/div[2]/textarea

baidu_sous = driver.find_element(By.XPATH,"/html/body/div[1]/div[2]/div[3]/div/div/div[2]/div/div/div/div/div[1]/div[4]/div[1]/div[2]/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/div[2]/input[1]")

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

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

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,"//input[substring(@name,3)='rd']")

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

hao123_sous = driver.find_element(By.XPATH,"//input[contains(@name,'rd')]")

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

hao123_tianq = driver.find_element(By.XPATH,"//a[text()='七日天气']")

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']/li[1]/div[@class='first-cate-container']/a")

jd_goods1 = jd_goods[0]

jd_goods1.click()

相关推荐
weixin_424999362 小时前
如何正确对对象键名进行字母序排序并存入数组
jvm·数据库·python
生信研究猿2 小时前
ACM格式:在pycharm输入
python
Jackyzhe2 小时前
从零学习Kafka:ZooKeeper vs KRaft
学习·zookeeper·kafka
maqr_1102 小时前
如何配置Oracle 19c审计清理_DBMS_AUDIT_MGMT自动清除策略
jvm·数据库·python
qq_372906932 小时前
如何用 JavaScript 实现单选式盒子颜色切换(点击高亮,其余复原)
jvm·数据库·python
2401_897190552 小时前
怎样使用Navicat高级特权进行还原时解决字符集冲突_企业数据保护
jvm·数据库·python
weixin_580614002 小时前
c++文件锁使用方法 c++如何实现多进程文件同步
jvm·数据库·python
qq_330037992 小时前
如何转换数据文件字节序_CONVERT DATAFILE用于跨OS平台数据库迁移
jvm·数据库·python
白日梦想家6812 小时前
博客二:递归实战避坑指南,从入门到熟练运用
开发语言·python