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

ops/2024/12/23 1:27:55/

按照谷歌浏览器 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.ppmy.cn/ops/27796.html

相关文章

企业网站必看——企业级OV SSL证书详细介绍

组织验证&#xff08;Organization Validation&#xff0c;简称OV&#xff09;SSL证书作为网络安全解决方案的重要组成部分&#xff0c;通过提供中级的安全保障和增强的网站身份验证&#xff0c;有效提升了网站的安全级别与用户信赖度。本文将深入探讨OV SSL证书的工作原理、申…

【设计模式】之单例模式

系列文章目录 【设计模式】之责任链模式【设计模式】之策略模式【设计模式】之模板方法模式 文章目录 系列文章目录 前言 一、什么是单例模式 二、如何使用单例模式 1.单线程使用 2.多线程使用&#xff08;一&#xff09; 3.多线程使用&#xff08;二&#xff09; 4.多线程使用…

微软如何打造数字零售力航母系列科普06 - 如何使用微软的Copilot人工智能

如何使用微软的Copilot人工智能&#xff1f; Copilot和ChatGPT有很多相似之处&#xff0c;但微软的聊天机器人本身就有一定的优势。以下是如何对其进行旋转&#xff0c;并查看其最引人注目的功能。 ​​​​​​​ &#xff08;资料来源&#xff1a;Lance Whitney/微软&…

MATLAB 数据导入

MATLAB 数据导入&#xff08;ImportData&#xff09; 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

前端如何优化工程

文章目录 使用CDN1. 请求定位&#xff1a;2.内容缓存&#xff1a;3.负载均衡&#xff1a;4.边缘计算&#xff1a; 优化Webpack1.合理配置Loader&#xff1a;2.优化代码分割&#xff1a;3.压缩和优化输出文件&#xff1a;4.利用Tree Shaking&#xff1a;5.优化解析速度&#xff…

Flask 请求与响应

Flask 是一个灵活而强大的 Web 框架&#xff0c;而请求与响应则是构建 Web 应用的核心组成部分。在本文中&#xff0c;我们将探讨 Flask 中请求与响应的各种用法&#xff0c;包括不同的请求方法、重定向、响应对象、获取查询参数以及文件上传等。 请求 在 Flask 中&#xff0…

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…

【c++】反向迭代器的探究实现

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 在list中我们实现了正向的迭代器&#xff0c;学习完优先级队列后&#xff0c;我们也对适配器模式有了一个深刻的理解&#xff0c;这篇文章基于这种模式下&#xff0c;实现各类容器的反向迭…