webUI自动化之元素及浏览器操作

一、元素定位方式

  1、元素属性定位:

 1 element = driver.find_element_by_id(self, 'id')   

    该类方法已经过时,新的方法如下:

element = driver.find_element(By.ID, 'ID 值')        # 用元素的 ID 属性定位element = driver.find_element(By.CLASS_NAME, 'classname 值')    # 用元素的 CLASS_NAME 属性定位element = driver.find_element(By.NAME, 'name 值')       # 用元素的 NAME 属性定位element = driver.find_element(By.LINK_TEXT, '元素文本值')    # 用元素的 LINK_TEXT(链接文本) 定位element = driver.find_element(By.PARTIAL_LINK_TEXT, '元素文本部分值')  # 用元素的 LINK_TEXT(链接文本,部分匹配) 定位element = driver.find_element(By.TAG_NAME, '元素标签名')    # 用元素的 TAG_NAME(标签名) 定位element = driver.find_element(By.CSS_SELECTOR, '元素 css_selector 值')  # 用元素的 CSS选择器 定位,这个可以先去了解一下CSS选择的用法,也可以不用,F12可直接复制当前元素的 css属性 值element = driver.find_element(By.XPATH, '元素 xpath 路径')      # 用元素的 XPATH路径 定位,这个也可以去了解一下XPATH的语法,也可以不用,F12可直接复制当前元素的 xpath 路径

    class By如下:

二、鼠标及键盘事件

  1、鼠标事件

    模拟鼠标操作,需先引入 ActionChains 类,具体用法如下:

 1 from time import sleep2 from selenium import webdriver3 from selenium.webdriver.common.by import By4 from selenium.webdriver.common.action_chains import ActionChains  # 引入5 6 driver = webdriver.Chrome()7 driver.get(r'https://xxx')  # 打开浏览器并访问该链接,这里的链接不便展示哈8 driver.maximize_window()9 
10 # 定位元素并操作
11 driver.find_element(By.NAME, 'username').send_keys('v-luoyang')
12 driver.find_element(By.NAME, 'password').send_keys('12456')
13 btn = driver.find_element(By.CLASS_NAME, 'el-button')
14 
15 ActionChains(driver).click(btn).perform()   # 单击 btn 元素,更多方法参见 ActionChains 的源码,说的非常清楚
16 
17 
18 # 关闭并退出浏览器
19 driver.quit()

   2、键盘事件

    模拟键盘操作,需先引入 Keys 模块,再使用 send_keys 方法,具体使用如下:

 1 from time import sleep2 from selenium import webdriver3 from selenium.webdriver.common.by import By4 from selenium.webdriver.common.keys import Keys
 5 6 driver = webdriver.Chrome()7 driver.get(r'https://xxx/')  # 打开浏览器并访问该链接,这里的链接不便展示哈8 driver.maximize_window()9 
10 # 定位元素
11 user_ele = driver.find_element(By.NAME, 'username')
12 pwd_ele = driver.find_element(By.NAME, 'password')
13 
14 user_ele.send_keys('v-luoyang')     # 输入值
15 user_ele.send_keys(Keys.CONTROL, 'a')     # 全选
16 user_ele.send_keys(Keys.DELETE)     # 删除
17 user_ele.send_keys(Keys.ENTER)     # 回车
18 
19 btn = driver.find_element(By.CLASS_NAME, 'el-button')
20 btn.click()
21 
22 
23 # 关闭并退出浏览器
24 #driver.quit()

  更多的支持的键盘符号可在 Keys 类里查看

三、浏览器操作

  

 1 from selenium import webdriver2 3 driver = webdriver.Chrome()     # 获取浏览器对象4 driver.get(r'https://gad.dev.ztgame.com/')  # 打开浏览器并访问该链接,这里的链接不便展示哈5 driver.get(r'https://gad.dev.ztgame.com/#/creative/material')   # 进入其他链接6 driver.maximize_window()    # 浏览器窗口最大化7 driver.set_window_size(width=480, height=800)   # 设置浏览器的宽高8 name = driver.name  # 获得浏览器名称9 driver.forward()    # 前进
10 driver.back()   # 后退
11 driver.refresh()    # 刷新
12 current_handle = driver.current_window_handle   # 获取当前窗口句柄,即获取当前浏览器当前窗口的编号
13 all_handles = driver.window_handles     # 获取当前浏览器所有窗口的句柄(当前浏览器指通过上面 get() 方法打开的浏览器)
14 driver.switch_to_window('句柄')   # 切换当前窗口为指定的句柄的窗口
15 current_url = driver.current_url    # 获取当前窗口的url
16 title = driver.title    # 获取当前窗口的标题
17 page = driver.page_source   # 获取当前窗口的源码
18 driver.get_screenshot_as_file('截图保存路径')     # 窗口截图,保存至指定的路径
19 
20 driver.close()      # 关闭当前窗口
21 driver.quit()       # 关闭所有窗口并退出浏览器

四、等待

  1、sleep()

      例:

        sleep(3),强制等待,无论程序是否加载完成,必须等待3s,常用于调试,在元素定位莫名定位不到的时候用它也许可以解决问题

  2、隐式等待

      例:

        driver.implicitly_wait(30)   # 隐性等待,最长等30秒

        相当于设置了一个最长等待时间,若在规定时间内找到则执行下一步,未找到则抛出NoSuchElementException;它的作用域是全局的,跟driver的生命周期相同,一般定义在父类中,用于给所有子类的页面元素设置该等待机制,设置一次,全局有效,直到 driver 实例被关闭。

      PS:可以和显式等待一起使用,但建议不要一同使用。一同使用时,取决于谁设置的时间更长。

  3、显式等待

      显式等待一般搭配 until() 方法使用,意为直到规定时间内定位到该元素,例:

        

1

WebDriverWait(driver, 200.5).until(EC.presence_of_element_located(locator))    #  locator 如 locator = (By.ID, 'username')

      PS:这里用到了 WebDriverWait 类与 expected_conditions 模块,这里借用一下另一个博客的(他的博客地址)

         ①WebDriverWait 类里主要有两个方法和一个 init 方法,具体用处可以看源码,但官方话看得我是头昏脑胀,还是看一些比较容易懂的

        __init__,参数如下: 

1     driver: 传入WebDriver实例,即我们上例中的driver
2     timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
3     poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
4     ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。

        until,参数如下:

1 method: 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False

2 message: 如果超时,抛出TimeoutException,将message传入异常 

        

        until_not 与 until 相反。

        调用方法:

 1 WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息) ,这里的可执行方法指该方法中一定要有__call()__方法,没有就会报错 TypeError: 'xxx' object is not callable

        ② expected_conditions 是 selenium 中的一个模块(selenium.webdriver.support.expected_conditions),主要包含了一系列的判断条件。

      

        以下两个条件类验证title,验证传入的参数title是否等于或包含于driver.title
          title_is
          title_contains

        以下两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw’)
        顾名思义,一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行
          presence_of_element_located
          presence_of_all_elements_located

        以下三个条件验证元素是否可见,前两个传入参数是元组类型的locator,第三个传入WebElement
        第一个和第三个其实质是一样的
          visibility_of_element_located
          invisibility_of_element_located
          visibility_of

        以下两个条件判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value
          text_to_be_present_in_element
          text_to_be_present_in_element_value

        以下条件判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
          frame_to_be_available_and_switch_to_it

        以下条件判断是否有alert出现
          alert_is_present

        以下条件判断元素是否可点击,传入locator
          element_to_be_clickable

        以下四个条件判断元素是否被选中,第一个条件传入WebElement对象,第二个传入locator元组
        第三个传入WebElement对象以及状态,相等返回True,否则返回False
        第四个传入locator以及状态,相等返回True,否则返回False
          element_to_be_selected
          element_located_to_be_selected
          element_selection_state_to_be
          element_located_selection_state_to_be

        最后一个条件判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
          staleness_of

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

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

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

相关文章

一大波你可能不知道的 Linux 网络工具

如果要在你的系统上监控网络,那么使用命令行工具是非常实用的,并且对于 Linux 用户来说,有着许许多多现成的工具可以使用,如:nethogs, ntopng, nload, iftop, iptraf, bmon, slurm, tcptrack, cbm, netwatch, collectl…

idea:springboot项目搭建

目录 一、创建项目 1、File → New → Project 2、Spring Initializr → Next 3、填写信息 → Next 4、web → Spring Web → Next 5、填写信息 → Finish 6、处理配置不合理内容 7、注意事项 7.1 有依赖包,却显示找不到依赖,刷新一下maven 7.…

社交媒体的未来图景:探索Facebook的数字化之旅

随着科技的迅猛发展,数字化社交已经成为了我们日常生活中不可或缺的一部分。在这个数字化时代,社交媒体平台扮演着重要角色,其中Facebook作为社交媒体的先锋,不断探索创新之路,引领着数字化社交的未来发展。本文将深入…

两天学会微服务网关Gateway-Gateway路由规则

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

和数软件:区块链技术的爆发与冲击

什么是区块链?它是如何发展而来的?应用在哪些领域?将会对我国的社会经济产生哪些重大影响? 什么是区块链 区块链作为一种底层技术,最早的实践是数字货币。根据最早的中本聪定义,区块链实质上是一种基于网…

机器学习--循环神经网络(RNN)4

一、RNN的学习方式 如果要做学习,需要定义一个损失函数(loss function)来评估模型的好坏,选一个参数要让损失最小。 以槽填充为例,如上图所示,给定一些句子,给定一些标签,告诉机器…

借助Aspose.html控件,在 Java 中将 URL 转换为 PDF

如果您正在寻找一种将实时 URL 中的网页另存为 PDF文档的方法,那么您来对地方了。在这篇博文中,我们将学习如何使用 Java 将 URL 转换为 PDF。从实时 URL转换HTML网页可以像任何其他文档一样保存所需的网页以供离线访问。将网页保存为 PDF 格式可以轻松突…

华为ce12800交换机m-lag(V-STP模式)配置举例

配置## 标题思路 采用如下的思路配置M-LAG双归接入IP网络: 1.在Switch上配置上行接口绑定在一个Eth-Trunk中。 2.分别在SwitchA和SwitchB上配置V-STP、DFS Group、peer-link和M-LAG接口。 3.分别在SwitchA和SwitchB上配置LACP M-LAG的系统优先级、系统ID。 4.分别在…

【STM32+HAL】GY25倾斜度角度模块

一、前言 有关MPU6050模块读取六轴传感器数值的详细内容,详见【STM32HAL】姿态传感器陀螺仪MPU6050模块 二、所用工具 1、芯片:STM32F103C8T6 2、配置软件:CUBEMX 3、编译器:KEIL5 4、产品型号:GY-25 5、使用芯片…

基于SSH框架的鞋业管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 MySQL 3 1.2 SSH框架 3 1.2.1 Struts 3 1.2.2 Spring 4 1.2.3 Hibernate 5 1.3 B/S架构 5 1.4 本章小结 6 2 系统分析 7 2.1 用例分析 7 2.2 功能需求 9 2.3 非功能需求 11 2.4 本章小结 12 3 系统设计 13 3.1 系统概要设…

BigDecimal可以用equals方法做等值比较吗?

结论是不可以,BigDecimal的equals方法不仅会比较值,还会比较精度,比如1.0和1.00虽然值是一样的,我们也倾向于认为是相同的,但是因为精度不同,最终得到的结论是false。 代码如下: Test public v…

Ansible Inventory主机清单和playbook 剧本

Ansible Inventory主机清单playbook 剧本一、inventory主机清单管理1、主机与组2、变量2.1 主机变量2.2 组变量2.3 组嵌套2.4 别名 3、inventory 中的变量 二、Ansible 的脚本 --- playbook 剧本1、playbook的组成2、如何定义playbook ?2.1 基本格式2.2 语句的横向/…

云计算科学与工程实践指南--章节引言收集

云计算科学与工程实践指南–章节引言收集 //本文收集 【云计算科学与工程实践指南】 书中每一章节的引言。 我已厌倦了在一本书中阅读云的定义。难道你不失望吗?你正在阅读一个很好的故事,突然间作者必须停下来介绍云。谁在乎云是什么? 通…

使用 Mendix 中的 OIDC 模块集成 Azure AD SSO

前言 在当今快速发展的数字化世界中,企业追求高效率和灵活性已成为常态。Mendix,作为一个先进的低代码开发平台,正是企业快速响应市场需求、加速数字化转型过程的利器。通过其直观的可视化开发环境,即使是非技术背景的用户也能设…

技术小知识:云计算服务下的IaaS,PaaS,SaaS⑥

一、云计算 云计算起源仿照天空的云朵聚集,意为对大量服务器的远程管理。以便能对服务器做空间、资源的最大动态协调利用和降低操作执行命令的复杂度。 二、云计算衍生下的服务 在服务器以一种云的形式存在,衍生除了很多服务提供,以便用户可以…

crossover2023激活码分享crossover免费升级2024 crossover24更新内容

CrossOver是一款功能强大的系统兼容软件,它能够让Mac和Linux用户在不安装Windows操作系统的情况下直接运行Windows应用程序。以下是关于CrossOver的更多信息: 一、工作原理 CrossOver的工作原理是通过在Mac或Linux系统上模拟Windows应用程序所需的运行…

循序渐进丨MogDB 数据库新特性之SQL PATCH绑定执行计划

1 SQL PATCH 熟悉 Oracle 的DBA都知道,生产系统出现性能问题时,往往是SQL走错了执行计划,紧急情况下,无法及时修改应用代码,DBA可以采用多种方式针对于某类SQL进行执行计划绑定,比如SQL Profile、SPM、SQL …

Python基础三

一、模块(model) 1、定义 以.py 结尾的文件,包含了Python对象定义和Python语句 如下:包含了两个模块,分别为 main.py 和 model.py 2、特点 模块让你能够有逻辑地组织你的Python 代码段。把相关的代码分配到一个模块…

Linux: 预备

计算机结构基础 操作系统: 内核 (管理软硬件) shell(给用户使用操作系统的方式) 操作系统的目标 对硬件抽象 原因:操作系统是对软硬件资源管理的应用软件抽象:内存管理, 进程管理, 文件管理, 驱动管理软件:驱动程序(给软件提供访问硬件的软件)硬件:磁盘(对应文件), 网卡等隔离…

基于SpringBoot的医疗资源共享平台设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SpringBoot框架 3 1.2 MyBatis框架 3 1.3 WebSocket技术 4 1.4 Selenium技术 5 1.5 EL-ADMIN技术 5 1.6 Ajax技术 5 1.7 本章小结 6 2 系统分析 7 2.1 功能需求分析 7 2.2 非功能需求 9 2.3 本章小结 10 3 系统设计 11 3.…