自动化测试web库(元素定位、元素操作、浏览器操作)

按照谷歌浏览器 Chrome :https://googlechromelabs.github.io/chrome-for-testing/

Chrome使用技巧:

1、找到自己想要的标签
打开检查,点击箭头,再点击你想要点击的地方
在这里插入图片描述
在这里插入图片描述
2、直接在浏览器上查询,看看是否查询成功
可以看到有多少元素,方面定位自己想要的,在Elements里面按 Ctrl + F
可以看到下面的框,在里面写搜索。

在这里插入图片描述
也可以右键直接复制查询命令,不过有时候会看不懂里面的内容。最好自己写。
在这里插入图片描述
使用Console进行标签查询,下面是例子
在这里插入图片描述

一、元素定位

xpath复制示例
在这里插入图片描述
主要查询方式:
1、By.CSS_SELECTOR 查询
2、By.XPATH 查询

from selenium import webdriver
from selenium.webdriver.common.by import Byimport time# 初始化
driver = webdriver.Chrome()
# 浏览器最大化
driver.maximize_window()# 获取地址 为了方便 后面写百度就是使用百度网站运行示例,其他以B站为例
driver.get("https://www.baidu.com/")
# driver.get("https://www.bilibili.com/")# 等待页面元素加载完毕,类似设置等待超时时间
driver.implicitly_wait(30)# 所有查询最好都在浏览器中的Console查询一下,看看有没有问题# By.ID查询 (有点框架ID是自动生成的,所以有时候无法使用这招,这种情况非常多。 特殊情况:有的前端程序员失误把id写重复了,也会有问题,这种情况非常少)
# driver.find_element(By.ID, 'kw').send_keys("百度")
# driver.find_elements 是查询后返回的 列表,然后进行你想要的操作# By.TAG_NAME查询
# <input class="nav-search-input" type="text" autocomplete="off" accesskey="s" maxlength="100"    这里换行了
# x-webkit-speech="" x-webkit-grammar="builtin:translate" value="" placeholder="自动化测试" title="自动化测试">
# B站是真讲究,专门给自动化测试程序员安排个标签进行测试,泪目了
# driver.find_element(By.TAG_NAME, 'input').send_keys("B站")# By.NAME查询  根据标签内的name去查询
# 希望查询的标签:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
# driver.find_element(By.NAME, 'wd').send_keys("百度")# By.LINK_TEXT查询  根据可点击的文本去查询
# 希望查询的标签:<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>
# driver.find_element(By.LINK_TEXT, '新闻').click()
# 包含该文本查询
# driver.find_element(By.PARTIAL_LINK_TEXT, '新').click()# 鼠标单次点击 .click()
# 键盘模拟 .send_keys("输入文本内容")
# 左键双击
# actions = ActionChains(drver)  # 初始化双击
# actions.double_click(i).perform()  # 真双击  i是你想要点击的内容# By.CSS_SELECTOR查询
# di    字符串前面加 #  例如: #kw                   键盘 .send_keys("百度")
# class 字符串前面加 .  例如: .nav-search-input     键盘 .send_keys("B站")
# 属性   字符串加 []    例如: [name="wd"]           键盘 .send_keys("百度")
# driver.find_element(By.CSS_SELECTOR, '[name="wd"]').send_keys("百度")# 查询示例:
# 标签.类别.类别.类别
# 希望查询的标签:<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>
# driver.find_element(By.CSS_SELECTOR, 'a.mnav.c-font-normal.c-color-t').click()# 组合一下
# driver.find_element(By.CSS_SELECTOR, 'input.s_ipt').send_keys("百度")# 百度为例子
# 标签  标签名[属性="内容"]
# driver.find_element(By.CSS_SELECTOR, 'a[href="http://news.baidu.com"]').click()
# 模糊匹配 包含 *   (重点:最常用)
# driver.find_element(By.CSS_SELECTOR, 'a[href*="news.baidu"]').click()
# 模糊匹配 开头 ^
# driver.find_element(By.CSS_SELECTOR, 'a[href^="http://news"]').click()
# 模糊匹配 结尾 $
# driver.find_element(By.CSS_SELECTOR, 'a[href$="news.baidu.com"]').click()# 定位子元素
# 绝对路径 层层下去 查找  父子 >  后代 空格
# html>body>div>div>div:nth-child(3)>a:nth-child(1)
# 顺序选择第几个 :nth-child(1)
# 演示:百度
# driver.find_element(By.CSS_SELECTOR, 'html>body>div>div>div:nth-child(3)>a:nth-child(1)').click()# By.XPATH查询 xml路径查询
# 上图有复制的截图 (快捷方式)
# driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[3]').click()# 目标标签:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
# 绝对路径是 / 一级一级向下查找
# driver.find_element(By.XPATH, '/html/body/div/div/div[3]/a').click()
# 相对路径 //  @后是属性  带空格的类连同空格都复制进来
# driver.find_element(By.XPATH, '//input[@id="kw"]').send_keys("百度")
# 相对路径 多个属性组合查询 and or
# driver.find_element(By.XPATH, '//input[@id="kw" and @name="wd" and @class="s_ipt" and '
#                               '@maxlength="255"]').send_keys("百度")
# 相对路径 多个属性组合+下标  补充:/.. 是查询上一级
# driver.find_element(By.XPATH, '//div[@id="s-top-left"]/a[4]').click()
# 相对路径 文本等于  text()是个函数
# driver.find_element(By.XPATH, '//a[text()="新闻"]').click()
# 相对路径 文本包含  text()是个函数  contains()是个函数  注意是逗号
driver.find_element(By.XPATH, '//a[contains(text(),"新闻")]').click()# # 获取页面上的源码
# page_source = driver.page_source
# print(page_source)time.sleep(3)

二、元素操作

select 下拉框操作
模拟键盘的常用操作
点击弹窗
等待元素出现后,再点击
根据url下载内容和保存

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests# 初始化
driver = webdriver.Chrome()
# 浏览器最大化
driver.maximize_window()# 示例网址1
# driver.get("https://www.iviewui.com/view-ui-plus/component/form/radio")#
# # 等待页面元素加载完毕,类似设置等待超时时间
# driver.implicitly_wait(30)
#
# # 相对查询
# driver.find_elements(By.XPATH, '//input[@class="ivu-radio-input" and @type="radio"]')[0].click()
# time.sleep(2)
# driver.find_elements(By.XPATH, '//input[@class="ivu-radio-input" and @type="radio"]')[2].click()
# time.sleep(2)
# driver.find_elements(By.XPATH, '//input[@class="ivu-radio-input" and @type="radio"]')[3].click()# 示例网址2
# https://sahitest.com/demo/selectTest.htm
# driver.get("https://sahitest.com/demo/selectTest.htm")'''
<select id="s1">
<option value="-1">--SELECT--</option>
<option value="46">Business Phone</option>
<option value="47">Cell Phone</option>
<option value="48">Email</option>
<option value="49">Fax</option>
<option value="51">Home Phone</option>
<option value="50">Mail</option>
</select>
'''# select 下拉框操作
# select = Select(driver.find_element(By.ID, 's1'))
# 方式一 第几个
# select.select_by_index(0)  # 没变化是因为第一个就是这个
# select.select_by_index(1)
# select.select_by_index(2)
# select.select_by_index(3)
# select.select_by_index(4)
# select.select_by_index(5)
# select.select_by_index(6)
# 方式二 通过value=  注意:不是下标
# select.select_by_value('-1')  # 没变化是因为第一个就是这个
# select.select_by_value('46')
# select.select_by_value('47')
# select.select_by_value('48')
# select.select_by_value('49')
# select.select_by_value('50')
# select.select_by_value('51')
# 方式三 通过内容
# select.select_by_visible_text("--SELECT--")  # 没变化是因为第一个就是这个
# select.select_by_visible_text("Business Phone")
# select.select_by_visible_text("Cell Phone")  # 后面就不演示了# 清空输入框内的内容
# 获取地址 为了方便 后面写百度就是使用百度网站运行示例
# driver.get("https://www.baidu.com/")
# driver.implicitly_wait(30)
# driver.find_element(By.ID, 'kw').send_keys("百度")
# time.sleep(2)
#
# # 方式一:清空默认内容
# driver.find_element(By.ID, 'kw').clear()
# time.sleep(2)
# 方法二:通过键盘全选,然后直接输入新的内容,就不用clear了
# driver.find_element(By.ID, 'kw').send_keys(Keys.CONTROL + 'a')
# driver.find_element(By.ID, 'kw').send_keys(Keys.BACKSPACE)# 常用操作:# 1、回车键:Keys.ENTER
# 2、删除键:Keys.BACK_SPACE
# 3、空格键:Keys.SPACE
# 4、制表键:Keys.TAB
# 5、回退键:Keys.ESCAPE
# 6、刷新键:Keys.F5# 1、全选:send_keys(Keys.CONTROL,'a')
# 2、复制:send_keys(Keys.CONTROL,'c')
# 3、粘贴:send_keys(Keys.CONTROL,'v')
# 4、剪切:send_keys(Keys.CONTROL,'x')# 弹窗
driver.get("https://sahitest.com/demo/promptTest.htm")
driver.find_element(By.NAME, 'b1').click()
# 看一下弹窗上的文字
print(driver.switch_to.alert.text)
time.sleep(2)
driver.switch_to.alert.send_keys("输入测试一下")  # 在输入框是看不到打字的, 但是在确定后会显示出来的
time.sleep(2)
# 把弹窗的 确定点掉
driver.switch_to.alert.accept()
# 把弹窗的 取消点掉
# driver.switch_to.alert.dismiss()# 下面没有演示
# # 先判断这个元素是否出现,等待出现后在操作
# # 最多等待60秒
# wait = WebDriverWait(driver, 60)
# # 等待(判断)
# output_div = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'img')))# 根据url 保存图片
# img_response = requests.get(url_i)
# if img_response.status_code == 200:
#     file_name = url_i.split("/")[-1]
#     output_path = os.path.join(output_folder, file_name)
#     with open(output_path, 'wb') as f:
#         f.write(img_response.content)
#     print(f"Downloaded {url_i} to {output_path}")time.sleep(3)

三、浏览器操作

待更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+阿里云实现验证码登录注册及重置密码

开通阿里云短信服务 阿里云官网 创建API的Key 可以使用手机号或者刷脸来进行创建Key 创建成功 开通完成以后接下来实现代码请求阶段 配置maven依赖 <!-- 阿里云 oss 短信 依赖--><dependency><groupId>com.aliyun</groupId><artifactId>dysm…

三、VUE数据代理

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 Object.defineProperty() Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性&#xff0c;或修改其现有属性&#xff0c;并返回此对象。 Object.defineProperty() 数据代理 通过一个对象代理另一个对象中属…

【imazing骗局】imazing软件安全吗 需要越狱吗 为什么iPhone都会装iMazing来管理

鉴于苹果设备的封闭性与安全性&#xff0c;我们大部分情况下都需要搭配iTunes进行设备的管理。但作为一款全方位的iOS设备管理软件&#xff0c;iMazing竟然可以突破iTunes的限制&#xff0c;与设备直接连接&#xff0c;进行备份、管理等操作。 因此&#xff0c;很多人都会有疑…

太速科技-基于6U CPCIe的TMS320C6678+KU060的信号处理板卡

基于6U CPCIe的TMS320C6678KU060的信号处理板卡 一、板卡概述 基于6U CPCIe的C6678KU060的信号处理板卡是新一代FPGA的高性能处理板卡。板卡采用一片TI DSP TMS320C6678和一片Xilinx公司 XCKU060-2FFVA1156I作为主处理器&#xff0c;Xilinx 的Aritex XC7A200T作为辅助处…

数据结构——栈的应用

数据结构——栈的应用 括号匹配中缀转后缀什么是中缀后缀中缀表达式 (Infix Notation)后缀表达式 (Postfix Notation, Reverse Polish Notation, RPN) 加减&#xff0c;乘除运算处理括号后缀转中缀 我们今天来看栈的应用&#xff1a; 括号匹配 栈一个经典的应用就是括号匹配&…

set_input_delay的理解

1&#xff0c;set_input_delay约束理解 input_delay是指输入的数据到达FPGA的pad引脚时相对于时钟边沿的延迟有多大&#xff0c;单位是ns&#xff0c;数值可以是正&#xff0c;也可以是负。通过set_input_delay约束告诉编译器输入时钟和输入数据的相位关系。如下图所示假设时钟…

数字IC后端先进工艺设计实现之TSMC 12nm 6Track工艺数字IC后端实现重点难点盘点

大家知道咱们社区近期TSMC 12nm ARM Cortexa-A72(1P9M 6Track Metal Stack)已经开班。这里小编要强调一点:不要认为跑了先进工艺的项目就会很有竞争力&#xff01;如果你仅仅是跑个先进工艺的flow&#xff0c;不懂先进工艺在数字IC后端实现上的不同点&#xff0c;为何有这样的不…

推荐一个wordpress免费模板下载

首页大背景图&#xff0c;首屏2张轮播图&#xff0c;轮换展示&#xff0c;效果非常的炫酷&#xff0c;非常的哇噻&#xff0c;使用这个主题搭建的wordpress网站&#xff0c;超过了200个&#xff0c;虽然是一个老主题了&#xff0c;不过是经得起时间考验的&#xff0c;现在用起来…

[iOS]使用CocoaPods发布公开库

1.检查库名是否已被占用 选择库名时&#xff0c;尽量选择具有描述性并且独特的名字&#xff0c;这不仅可以避免命名冲突&#xff0c;还可以帮助用户更好地理解库的用途和功能。 在实际创建和发布 CocoaPods 库之前&#xff0c;确实应该检查库名是否已经被占用&#xff0c;以避…

敏捷之Scrum开发

目录 一、什么是 Scrum 1.1 Scrum 的定义 二、Scrum 迭代开发过程 2.1 迭代开发过程说明 2.1.1 开发方法 2.1.1.1 增量模型 2.1.1.1.1 定义 2.1.1.1.2 模型方法说明 2.1.1.2 迭代模型 2.1.1.2.1 定义 2.1.1.2.2 模型方法说明 2.1.2 迭代过程 2.1.2.1 产品需求Produ…

万万没想到,原来这些维生素对帕金森有好处!

亲爱的读者朋友们&#xff0c;今天我们要聊一个特别的群体——帕金森病患者。在面对这一神经系统退行性疾病时&#xff0c;除了遵循医嘱进行药物治疗和康复锻炼&#xff0c;合理的饮食和营养补充也显得尤为重要。那么&#xff0c;究竟哪些维生素是他们不可或缺的呢&#xff1f;…

go语言实现简单登陆返回token样例

目录 1、代码实现样例&#xff1a; 2、postman调用&#xff0c;获取登陆后的token&#xff1a; 1、代码实现样例&#xff1a; package mainimport ("net/http""time""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var …

【代码问题】【Pytorch】训练模型时Loss为NaN或INF

解决方法或者问题排查&#xff1a; 加归一化层&#xff1a; 我的问题是我新增的一个模块与原来的模块得到的张量相加&#xff0c;原张量是归一化后的&#xff0c;我的没有&#xff1a; class Module(nn.Module):def __init__(self,dim,):super().__init__()# 新增一个LayerNo…

python学习笔记B-13:序列结构之元组--元组的相关操作

元组的常用相关操作有&#xff1a;获取最大值、获取最小值、获取元组长度、查询是否包好某元素、获取元素索引值、获取元素数量 t (2,4,6,90,34,25,78) print("原元组&#xff1a;",t) print("最大值&#xff1a;",max(t)) print("最小值&#xff1…

matlab新手快速上手3(差分进化算法)

本文用经典差分进化框架模板&#xff0c;对matlab新手友好&#xff0c;快速上手看懂matlab代码&#xff0c;快速应用实践&#xff0c;源代码在文末给出。 差分进化算法定义&#xff1a; 差分进化算法&#xff08;Differential Evolution&#xff0c;简称DE算法&#xff09;是…

KUKA机器人如何给IO信号或寄存器添加中文注释信息?

KUKA机器人如何给IO信号或寄存器添加中文注释信息? 如下图所示,首先,我们需要登录专家以上用户权限(默认密码KUKA), 如下图所示,点击“投入运行”—“网络配置”, 如下图所示,此时机器人的IP地址为192.168.1.10, 如下图所示,用一根网线连接机器人控制柜到笔记…

基于SpringBoot+Vue大学生兼职管理系统的设计与实现

目录 一、前言介绍 二、功能需求 三、功能结构设计 四、管理员功能实现 招聘单位管理 用户管理 论坛管理 公告信息管理 五、招聘单位功能实现 职位招聘管理 职位留言管理 简历投递管理 六、用户功能实现 在线论坛 职位招聘信息 简历投递 简历 七、部分核心代码 …

【C语言进阶】程序编译中的预处理操作

&#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL.. &#x1f4da;以后会将数据结构收录为一个系列&#xff0c;敬请期待 ● 本期内容讲解C语言中程序预处理要做的事情 目录 1.1 预处理符号 1.2 #define 1.2.1 #define定义标识…

数据结构---线性表(顺序表)附代码

目录&#xff1a; 数据结构相关概念 1、什么是数据结构&#xff1f; 2、为什么需要数据结构&#xff1f; 顺序表 1、顺序表的概念及结构 1.1 线性表 1.2 顺序表 2、顺序表分类 3、动态顺序表的实现 什么是数据结构&#xff1f;&#xff1f; 数据结构是由 “数据”和 …

Unity 合并子物体获得简化Mesh

合并子物体获得简化Mesh &#x1f959;环境&#x1f96a;Demo &#x1f959;环境 PackageManager安装Editor Coroutines 导入插件&#x1f448; &#x1f96a;Demo 生成参数微调&#xff1a;Assets/EasyColliderEditor/Scripts/VHACDSettings/VHACDSettings.asset