python自动化测试(二):获取元素定位的基本方式

目录

一、前置代码

二、通过HTML元素ID的方式去进行元素定位

三、通过HTML元素的name属性进行元素定位

四、练习一:打开百度登录界面并输入数据后登录

五、通过HTML元素的类名来进行元素定位

六、通过链接的文本值方式进行元素定位

七、通过部分的链接文本值进行元素定位

八、通过标签名的方式进行元素定位

一、前置代码
# coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com"
driver.get(url)
# 最大化浏览器窗口
driver.maximize_window()
# 添加全局的等待时间
driver.implicitly_wait(10)

这里打开百度首页

二、通过HTML元素ID的方式去进行元素定位

语法介绍:

通过ID方式进行元素定位
find_element_by_id("id值")

对id值进行事件操作

表单输入内容:send_keys("字符串")

.send_keys("文本") 是将指定的文本输入到找到的元素中。

send_keys 是Selenium提供的方法,用于模拟键盘输入操作。

在这个方法中,可以传递一个字符串参数,表示要输入的文本。

点击事件:click()

操作代码

# 一.通过ID方式进行元素定位
# 在百度首页输入框中输入软件测试
driver.find_element_by_id("kw").send_keys("软件测试")
# 点击“百度一下”按钮
driver.find_element_by_id("su").click()

跑一下没问题就把代码注释掉,进行下一个操作

三、通过HTML元素的name属性进行元素定位

介绍:

通过name方式进行元素定位
语法:find_element_by_name("name值")

同样,这里打开百度首页,然后去输入一个“人工智能”

# 在百度首页输入框中输入人工智能
driver.find_element_by_name("wd").send_keys("人工智能")

跑起来没问题,拓展一下需求:

四、练习一:打开百度登录界面并输入数据后登录

此时,点击百度首页的右上角登录按钮,弹出

结合上述内容,编写一个需求:打开首页 --> 点击右上角登录按钮 --> 输入 账号、密码 --> 勾选协议 --> 点击登录

# #在百度首页点击右上角的登录按钮
driver.find_element_by_id("s-top-loginbtn").click()
# #输入百度账号
driver.find_element_by_name("userName").send_keys("zhangsan")
# #输入密码
driver.find_element_by_id("TANGRAM__PSP_11__password").send_keys("12345678")
# #点击登录按钮
driver.find_element_by_name("isAgree").click()
driver.find_element_by_id("TANGRAM__PSP_11__submit").click()
time.sleep(5)

五、通过HTML元素的类名来进行元素定位

介绍:

通过class方式进行元素定位
语法:find_element_by_class_name("class_name值")

这里通过华为商场的登录来进行演示

# 三.通过class_name方式进行元素定位
url = "https://id1.cloud.huawei.com/CAS/portal/loginAuth.html"  # 华为登录页面
driver.get(url)

# 点击div
driver.find_element_by_class_name("hwid-input-div").click()
driver.find_element_by_class_name("userAccount").send_keys("admin")
time.sleep(1)
# 输入密码
driver.find_element_by_class_name("hwid-input-div").click()
driver.find_element_by_class_name(
    "hwid-input-pwd").send_keys("1234567a")
time.sleep(1)

# 点击登录按钮
driver.find_element_by_class_name("button-base-box").click()

1、url重新设置了地址并get打开

2、通过类名去输入表单数据,但是要先点击div盒子进入输入框

在这里遇到个问题,使用多类名的话,就会提示找不到元素的报错,在进行元素检查的时候

直接复制粘贴了两个类名,就报错找不到了,这里可以注意一下

六、通过链接的文本值方式进行元素定位

介绍:

1、通过链接的全部的文本值进行元素定位(link_text)
find_element_by_link_text("全部的文本值")

2、获取页面句柄
handles=driver.window_handles

以列表的形式返回结果

3、切换句柄
driver.switch_to_window(handles[-1])

这里的句柄接收的变量可以打印输出,是一个以列表,然后是英文字符串的方法

可以在控制台进行打印,

(列表中两个值,也就是分别对应了两个页面的头)

这里跑一个例子:打开首页 --> 打开新闻页 --> 到最后一个句柄 --> 回到第一个 --> 再返回 --> 打开文字标题为‘xxx’的新闻

# 1、在百度首页,点击新闻链接
driver.find_element_by_link_text("新闻").click()
# 2、点击:杭州亚残运会运动员风采:每一箭的信心与信任
# 获取页面句柄(获取所有窗口的句柄)
handles = driver.window_handles
print(f'当前页面的句柄:{handles}')

# 3、切换句柄
driver.switch_to_window(handles[-1])
time.sleep(1)
driver.switch_to_window(handles[0])
time.sleep(1)
driver.switch_to_window(handles[-1])

# 4、选中新闻文本,点击
driver.find_element_by_link_text('杭州亚残运会运动员风采:每一箭的信心与信任').click()

七、通过部分的链接文本值进行元素定位

通过部分的链接文本值进行元素定位
语法:find_element_by_partial_link_text("部分的链接文本值")

举个例子:首页打开新闻(在首页定位新字) --> 打开下面这个新闻 ,部分文字:杭州亚残运会

杭州亚残运会运动员风采:每一箭的信心与信任

# 1、点击百度首页新闻
driver.find_element_by_partial_link_text("新").click()
time.sleep(1)

# 2、获取句柄(这里要记得切换句柄)
handles = driver.window_handles
driver.switch_to_window(handles[-1])
time.sleep(1)

# 3、点击“杭州亚残运会运动员风采:每一箭的信心与信任 ”链接
driver.find_element_by_partial_link_text("杭州亚残运会").click()

八、通过标签名的方式进行元素定位

通过标签名的方式进行元素定位
语法:find_element_by_tag_name("标签名")

# 打印小米官网中,顶部nav导航栏
url = "https://www.mi.com/"
driver.get(url)
# 获取到导航栏的nav标签
ele = driver.find_element_by_tag_name("nav")
print(f'元素:{ele}')
print(f'包含的文本内容:{ele.text}')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

技术背景 实时位置(MobilePosition)订阅和上报,对GB28281设备接入终端尤其重要,如移动单兵设备、执法记录仪、智能安全帽、车载终端等,Android国标接入设备通过获取到实时经纬度信息,按照一定的间隔上报到…

Hadoop3教程(三十五):(生产调优篇)HDFS小文件优化与MR集群简单压测

文章目录 (168)HDFS小文件优化方法(169)MapReduce集群压测参考文献 (168)HDFS小文件优化方法 小文件的弊端,之前也讲过,一是大量占用NameNode的空间,二是会使得寻址速度…

【目标跟踪】多目标跟踪测距

文章目录 前言python代码(带注释)main.pysort.pykalman.pydistance.py 结语 前言 先放效果图。目标框内左上角,显示的是目标距离相机的纵向距离。目标横向距离、速度已求出,没在图片展示。这里不仅仅实现对目标检测框的跟踪&#…

ios上架上传构建版本的windows工具

ios上架的必要步骤,是将打包好的二进制ipa文件,上传到app store的构建版本里,苹果并没有提供上传构建版本的工具,这里我介绍下windows下上传构建版本的方案。 下面说下上传的基本步骤: 第一步,上传前要先…

2023年中国医疗器械供应链服务平台发展趋势分析:向国家高端化市场发力[图]

医疗器械供应链服务主要分为全流程供应链服务与院内SPD服务,同时全流程供应链服务主要分为市场、仓储物流与金融三大服务。在SPD数字化赋能下,大数据、云计算等技术支撑促进一站式数字化供应链业务协同平台,带动了整体医疗器械供应链服务的发…

Homeassistant docker配置

Homeassistant docker配置 【说明】本系列为自用教程,记录以便下次使用 【背景】一台J1900 4G64G的小主机,安装了OP系统,里面自带了Docker。为实现Homeassistant(简称HA)控制智能家居设备,进行如下配置。 【…

uni-app配置微信开发者工具

一、配置微信开发者工具路径 工具->设置->运行配置->小程序运行配置->微信开发者工具路径 二、微信开发者工具开启服务端口

SpringBoot依赖和代码分开打包

前言 在公司的项目中,一个SpringBoot工程可能就上百MB,这时候当线上网速不佳的时候,部署起来就十分的痛苦了。。经常等好久才能上传完毕,接下来我来教大家一个SpringBoot工程代码和依赖分开打包的方法。这种方法将依赖和代码分开…

AWS SAA-C03考试知识点整理

S3: 不用于数据库功能 分类: S3 Standard :以便频繁访问 S3 Standard-IA 或 S3 One Zone-IA : 不经常访问的数据 Glacier: 最低的成本归档数据 S3 Intelligent-Tiering智能分层 :存储具有不断变化或未知访问…

Linux虚拟网络设备—Veth Pair

veth是Virtual Ethernet Device的缩写,是一种成对出现的Linux虚拟网络接口设备。它最常用的功能是用于将不同的Linux network namespaces 命名空间网络连接起来,让二个namespaces之间可以进行通信。我们可以简单的把veth pair理解为用一根网线&#xff0…

使用Scala和Sttp库编写爬虫程序

以下是一个使用Scala和Sttp库编写的视频爬虫程序,该程序使用了proxy来获取IP。请注意,这个示例需要在上找到一个具体的视频链接,然后将其传递给crawlVideo函数。 import scala.util.{Failure, Success} import scala.concurrent.{Future, Ex…

TCP网络通信

TCP通信的 实现发1收1 package TCP1;//完成TCP通信的 实现发1收1import java.io.DataOutputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class Client {public static void main(S…

数据结构之队列(源代码➕图解➕习题)

前言 在学过栈之后,会了解到栈的底层是根据顺序表或者链表来构建的,那么我们今天要学习的队列是否也是基于顺序表和链表呢?那我们直接进入正题吧! 1. 队列的概念(图解) 还是跟上节一样,依旧用图…

Python3打印九九乘法表

# 九九乘法表 # 定义行数 i 1while i<9:# 定义列数j 1while j<i: # print(" %d * %d %d\t" %(j,i,(j*i)),end) # \t:对齐;end:不换行&#xff1b;j1i1print() # 必须添加这句话&#xff01;&#xff01;&#xff01;print("九九乘法表打印完毕&#xf…

HiveSQL分位数函数percentile()使用详解+实例代码

目录 前言 一、percentile() 二、percentile_approx() 点关注&#xff0c;防走丢&#xff0c;如有纰漏之处&#xff0c;请留言指教&#xff0c;非常感谢 前言 作为数据分析师每个SQL数据库的函数以及使用技能操作都得点满&#xff0c;尤其是关于统计函数的使用方法。关于统…

C语言系统化精讲(六):C语言选择结构和循环结构

文章目录 一、C语言选择结构1.1 if语句1.2 if…else语句1.3 else if语句1.4 if语句的嵌套1.5 条件运算符1.6 switch语句的基本形式1.7 多路开关模式的switch语句1.8 if…else语句和switch语句的区别 二、C语言循环结构2.1 C语言while循环和do while循环详解2.1.1 while循环2.1.…

【Python】Windows跟随程序启动和关闭系统代理

前言 在日常使用计算机时&#xff0c;偶尔可能需要配置代理来访问特定的网络资源或进行网络调试。 当在使用mitmproxy 时候&#xff0c; 程序开始前&#xff0c;需要手动打开系统代理&#xff1b;程序结束后&#xff0c;需要手动关闭系统代理。 这些重复性且没有技术含量工作…

C++智能指针[下](shared_ptr/weak_ptr/循环引用/删除器)

文章目录 4.智能指针[shared_ptr]4.1设计理念成员属性 4.2主要接口拷贝构造 4.3引用计数线程安全问题测试线程安全通过对计数引用的加锁保护使得类线程安全类实例化的对象使用时需要手动加锁保护 "锁"的引进线程引用传参问题 4.4整体代码 5.循环引用问题5.1问题的引入…

Java多线程秘籍,掌握这5种方法,让你的代码优化升级

介绍5种多线程方法&#xff0c;助您提高编码效率&#xff01; 如果您的应用程序与那些能够同时处理多个任务的应用程序相比表现不佳&#xff0c;很可能是因为它是单线程的。解决这个问题的方法之一是采用多线程技术。 以下是一些可以考虑的方法&#xff1a; 线程&#xff08;…

超声波测距与倒车雷达电路1

文章目录 超声测距 超声测距 超声测距跟倒车雷达绝大多数用的都是40kHz 接受是一个同相比例整流后加上一个比较器 换能器自带滤波&#xff0c;需要激发信号与换能器信号匹配 这个电路图是错的&#xff0c;一直不停的发&#xff0c;底下来不及收 频率越高传输距离…