Selenium:WebDriver简介及元素定位

news2024/11/26 2:51:08

目录

一、WebDriver原理

二、WebDriver定位方法

三、WebElement接口常用方法


一、WebDriver原理

1、关于WebDriver

设计模式:按照Server-Client的经典设计模式设计;

Server端:即Remote Server(远程服务器),可以是任意的浏览器,当脚本启动浏览器时,该浏览器就是Remote Server,它的职责是等待Client发送请求并做出响应;

Client端:简单来说就是我们的测试代码,测试代码中的一些行为是以HTTP请求的方式发送给被测试浏览器——Remote Server,Remote Server接受请求,执行相应操作,

 并在Response中返回执行状态、返回值等信息;

2、WebDriver工作流程

WebDriver启动目标浏览器,并绑定至指定端口,启动的浏览器实例将作为WebDriver的Remote Server;

Client端通过CommandExcuter发送HTTPRequest给Remote Server的侦听端口(通信协议:the webdriver wire protocol);

Remote Server需要依赖原生的浏览器组件(比如:chromedriver.exe)来转化浏览器的native调用;

3、WebDriver.log

python提供了logging模块给运行中的应用,提供了一个标准的信息输出接口。它提供了basicConfig方法用于基本信息的定义,开启debug模块,

就可以捕捉到Client端向Server端发送的请求,例子如下:

 1 # coding=utf-8
 2 # 导入logging模块,捕捉Client发送的请求
 3 from selenium import webdriver
 4 import logging
 5 from selenium import webdriver
 6 from selenium.webdriver.support.select import Select # select类
 7 from selenium.webdriver.common.by import By #By类:定位元素
 8 
 9 logging.basicConfig(level=logging.DEBUG)
10 driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
11 driver.get("www.baidu.com")
12 
13 driver.find_element_by_id("kw").send_keys("selenium")
14 driver.find_element_by_id("su").click()
15 driver.quit() 

二、WebDriver定位方法

WebDriver是基于selenium设计的操作浏览器的一套API,针对多种编程语言都实现了这套API,站在python角度来说,WebDriver是python的一个用于实现Web自动化的第三方库。

1、WebDriver定位方法

WebDriver定位方法提供了八种元素定位方法,所对应的方法、特性分别是:

2、XPath和CSS的类似功能对比

3、用By定位元素

针对前面介绍的8种定位方法,WebDriver还提供另一种方法,即:统一调用find_element()方法,通过By来声明定位方法,并且传入对应定位方法的定位参数,例子如下:

find.element()方法只用于定位元素,它需要两个参数,第一个参数是定位的类型,由By提供,第二个参数是定位的具体方式,在使用By之前需要将By类导入;

1 # 导入By类的包
 2 from selenium.webdriver.common.by import By
 3 find.element(by.id,"kw")
 4 find.element(by.name,"wd")
 5 find.element(by.class_name,"s_ipt")
 6 find.element(by.tag_name,"input")
 7 find.element(by.link_text,"新闻")
 8 find.element(by.partial_link_text,"新")
 9 find.element(by.xpath,"//*[@class='bg s_btn'")
10 find.element(by.css_selector,"span.bg s_btn_wr>input#su")

4、定位一组元素

上面提到的8种定位方法,都是针对单个元素定位的,webdriver还提供了与之对应的8种用于定位一组元素的方法。其一般应用于以下场景:

①批量操作元素,例如勾选页面上所有的复选框;

②先获取一组元素,再从这组元素中过滤出需要操作的元素;

定位一组元素的方法与定位单个元素的用法相似,唯一的区别是在element后面多一个s表示复数,具体如下:

1 # webdriver提供的定位一组元素方法
2 id                    find_elements_by_id()
3 Name                  find_elements_by_name()
4 class_name            find_elements_by_class_name()
5 tag Name              find_elements_by_tag_name()          
6 link text             find_elements_by_link_text()
7 partial link text     find_elements_by_partial_link_text()
8 xpath                 find_elements_by_xpath()
9 css selector          find_elements_by_css_selector()

获取一组元素中某个元素的几个方法:

len():用来计算元素的个数,通过print()打印出计算的结果;

pos()或pop(-1):默认获取一组元素的最后一个元素,并返回该元素的值;

pop(0):默认获取一组元素的第一个元素,并返回该元素的值;

pop(1):默认获取一组元素的第二个元素,并返回该元素的值;

......

三、WebElement接口常用方法

通常需要与页面交互的方法都由WebElement接口提供,包括上面提到的8种定位方法,下面介绍常用的几种方法:

submit():用于提交表单,例如搜索框输入关键字之后的“回车”操作,例如:

1 # 提交表单
2 from select import webdriver
3 driver = webdriver.Chrome("安装工具\python\chromedriver.exe")
4 driver.get("http://www.baidu.com")
5 driver.find_element_by_id("kw").send_keys("imyalost")
6 # 提交输入框中的内容
7 driver.find_element_by_id("imyalost").submit()
8 driver.quit()

注意:有时候submit()方法和click()方法可以互用,但submit()的应用范围不及click()广泛;

clear():清除文本;

send_keys(*value):模拟按键输入;

click():单击元素;

size:返回元素的尺寸;

text:获取元素的文本;

get.attribute(name):获得属性值;

is_displayed():设置该元素是否用户可见;

 1 # webelement接口常用方法
 2 from selenium import webdriver
 3 driver = webdriver.Chrome("安装工具\python\chromedriver.exe")
 4 driver.get("http://www.baidu.com")
 5 # 获得输入尺寸
 6 size = driver.find_element_by_id("kw").size
 7 print("size")
 8 # 返回百度页面底部备案信息
 9 text = driver.find_element_by_id("cp").text
10 print("text")
11 # 返回元素的属性值,可以是id、name、type或其他属性
12 attribute = driver.find_element_by_id("kw").get_attribute("type")
13 print("attribute")
14 # 返回元素结果是否可见,返回结果为True或Flase
15 result = driver.find_element_by_id("kw").is_displayed()
16 print("result") 

加油吧,测试人!如果你需要提升规划,那就行动吧,在路上总比在起点观望的要好。未来的你肯定会感谢现在拼命的自己! 

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

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

相关文章

@Autowired与@Resource原理知识点详解

文章目录 前言springIOC依赖注入的三种方式属性注入(字段注入)构造方法注入setter注入用哪个? Autowired实现原理 Resource实现原理结论 Autowired与Resource的不同来源不同参数不同使用不同装配顺序 前言 现在spring可以说是一统天下了&…

idea自带database连接mysql失败问题

idea2023.1版连接mysql失败 DBMS: MySQL (ver. 5.7.13) Case sensitivity: plainexact, delimitedexact Driver: MySQL Connector Java (ver. mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ), JDBC4.0) [08S01]Communications link fai…

【Python】漏斗模型--生成漏斗案例 Demo实例

文章目录 背景一、漏斗模型二、漏斗模型案例1. 电商购物流程2. AARRR模型 三、如何绘制漏斗模型?总结 背景 很早之前就知道漏斗模型,但没有做更多的了解和运用,后来对漏斗模型的了解稍加深入之后,觉得它不仅仅是一个模型&#xf…

优思学院:什么是快速改善方法(Kaizen Blitz)?

什么是快速改善方法(Kaizen Blitz)? Kaizen blitz是精益管理中的一种方法,指通过集中一段时间内的团队努力来实现快速改进的方法。 Kaizen是一个日语词汇,意为“改善”,是一种广泛应用于企业管理的哲学&a…

软考(中/高级)高频考点——进度管理

现在距离2023年上半年软考仅有一个多月时间了,相信很多考友都进入火热的备考状态了。 为了给备考的考友们减轻备考难点,小编特意为大家整理了软考(中/高级)的一些高频考点——进度管理,希望对正在备考软考的你有所帮助…

Redis在linux下安装

1.下载安装包 redis官网: Download | Redis 2.解压 2.1在目录下解压压缩包 tar -zxvf redis-7.0.11.tar.gz 2.2将redis移至另一目录下并改名为redis mv redis-7.0.11 /usr/local/redis 3.编译 进入到redis目录下,make命令编译 [rootVM-24-15-centos local]# cd…

直动式球形止回阀DCV-080-PB、DCV-100-PB

特性 导通型。 硬质阀芯和阀座寿命更长。 工业化通用阀腔。 紧凑的尺寸。 直动球形止回阀 ZCO-42 0类 直动提升止回阀 ZCP6 0类 直动球形止回阀 ZC-62 0类 直动式球形止回阀 DCV-080-B 系列8 直动式球形止回阀 DCV-100-B 系列10 直动式球形止回阀 DCV-080-PB 系列8 …

【HAL库】STM32F407----CAN通信----中断详解

CAN通信----基本原理 CAN通信----电路图 一、CAN通信----中断简介 STM32F407的CAN通信一共有四个专用中断,分别是: 发送中断FIFO0 接收中断FIFO1 接收中断错误中断 具体如下图所示: 二、CAN通信----中断寄存器 CAN中断使能寄存器&#x…

颠覆Android开发行业未来,让Kotlin成为您的新宠

会Java还要学习kotlin吗? 看看这位老哥的回答: kotlin语言有前景吗? 看看在职高级开发怎么说的: Kotlin是什么? Kotlin是一种基于Java虚拟机(JVM)的静态类型编程语言,可以与Java代…

天,地,人,伤寒六经概述

天,地,人,伤寒六经概述 人天地天地气机伤寒六经三阳:三阴:太阳,少阳,阳明,太阴,少阴,厥阴 人 人之所以是一个活着的人,就在于人能够不断地与外界进行物质交换&#xff0…

CSDN周赛第48期

不知不觉又过去两期周赛,相应地,题解也落下了。而当我再回去想下载考试报告时。。。 现在更新的速度有这么快了么? 可惜题目还是考过的旧题,尤其对我们这种老油子来说,最大的好处是省去了阅读理解的烦恼。 平心而论&…

【论文阅读】CubeSLAM: Monocular 3D Object SLAM

一、基于单目图像的3d目标检测 这一部分是论文中最难理解的一章,作者的主要想法,是利用2d图像来生成3d的目标包围框(bounding box),一方面这个思路本身就不是很好懂,另一方面,作者写这一章还是…

【linux】虚拟机安装部署

找了很多教程,有的不成功,记录一下成功的参考,感谢大佬们! 1.虚拟机VMware安装 安装教程:https://blog.csdn.net/qq_45793637/article/details/128159966 2.安装centos7 Linux镜像下载地址:centos-7-is…

使用多模态数据映射大脑网络

前言 人脑由解剖和功能性的网络组织而成,这些网络涉及大规模分布但相互作用的脑区。不同脑区之间的同步性已在手指敲击或视觉刺激等实验任务活动中观察到,但更重要的是,也在无任务条件下(即静息态)测量的内源性活动中被观察到。即使在休息时…

密歇根大学Python 系列之三:Python 数据科学应用项目

Python在数据科学领域的应用已经成为了趋势,同时也在不断地发展和演化。对于从事数据科学相关工作的从业者来说,熟练掌握Python已经成为了必备技能之一。而对于其他从业者来说,了解Python在数据科学领域的应用也可以帮助他们更好地理解数据科…

linux系统中的用户态和内核态

linux系统中的用户态和内核态 文章目录 linux系统中的用户态和内核态[TOC](文章目录) 定义一、Linux系统简介Linux内核结构 二、总结 定义 在Linux系统中,用户态和内核态是两种不同的运行模式,它们主要区别在于程序所处的权限和访问硬件资源的方式。 用…

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.解决

利用ubuntu自带的“软件与更新”安装完nvidia显卡驱动之后出现了如下提示。 NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.重启系统,在进行ubuntu启动引导的…

智能学习 | MATLAB实现PSO-SVM多输入单输出回归预测(粒子群算法优化支持向量机)

智能学习 | MATLAB实现PSO-SVM多输入单输出回归预测(粒子群算法优化支持向量机) 目录 智能学习 | MATLAB实现PSO-SVM多输入单输出回归预测(粒子群算法优化支持向量机)预测效果基本介绍模型原理程序设计参考资料预测效果 基本介绍 MATLAB实现PSO-SVM多输入单输出回归预测(粒…

adk部署win10

adksetup.exe安装 百度搜索adk 在这里插入图片描述 https://docs.microsoft.com/en-us/windows-hardware/get-started/adk-install下载adk 注意:要和操作系统版本对应上,我这里是1903版本的win10。

分布式事务处理方案及分布式锁相关

​ 本文偏理论 一、事务处理 1、事务处理的四个特性ACID Atomicity 原子性: 对于数据库的修改,全部执行or全部不执行 Consistency 一致性: Isolation 隔离性 : 亦称为串行化,防止事务间操作混淆,需要串行化或者序列化请求,使…