Python+selenium web测试入门基础!

自动化测试框架

  from selenium import webdriver

获取浏览器对象

  我这里是edge浏览器,用的是edge的webdriver

  # webdriver获取浏览器对象  driver = webdriver.Edge()

尝试打开网站并关闭​​​​​​​

  # 准备一个网址  url = "https://www.baidu.com/"  driver.get(url)  # 资源回收  driver.quit()

  元素定位

  定位普通元素

  元素可通过 ID,NAME,CLASS_NAME查找(tagname不常用)​​​​​​​

  driver.find_element(By.ID,"kw").send_keys("python")  driver.find_element(By.NAME,"wd").send_keys("python")  driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("python")  # 点击(click)id为su的控件  driver.find_element(By.ID,"su").click()

  .send_keys() 表示往元素中填入内容。

  .click() 表示点击元素

  也可以通过css选择器,前缀为’#’ 代表ID值, ‘.’ 代表class值,[ ]可直接输入内容定位元素​​​​​​​

  By.CSS_SELECTOR,'.s_ipt').send_keys('python')  driver.find_element(By.CSS_SELECTOR,'[name=wd]').send_keys('python')  driver.find_element(By.CSS_SELECTOR,'[value=百度一下]').click()  xpath定位法,通过决定路径或属性查找的方式来定位元素。  //* 代表全局查找符合条件的元素  [@xx=”xxx” ] 代表查找属性xx等于xxx的元素,不带@就不是属性,一般用于搜索文本  driver.find_element(By.XPATH,"//*[@id='kw']").send_keys('python')  driver.find_element(By.XPATH,'//*[@id="su"]').click()

  定位a标签(链接标签)

  可通过linktext、partial linktext定位

  driver.find_element(By.LINK_TEXT,'hao123').click()

  driver.find_element(By.PARTIAL_LINK_TEXT,'hao').click()

  获取元素属性​​​​​​​

  # 获取元素大小  print(driver.find_element(By.ID, 'kw').size)  # 获取元素文本  print(driver.find_element(By.ID, 'kw').text)  # 获取文本属性  print(driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]').get_attribute('href'))  # 元素是否可见  print(driver.find_element(By.ID, 'kw').is_displayed())  # 元素是否可用  print(driver.find_element(By.ID, 'kw').is_enabled())

获取网页属性​​​​​​​

  # 获取页面title  print(driver.title)  # 获取网页url  print(driver.current_url)  # 浏览器后退  driver.back()  # 浏览器前进  driver.forward()  # 浏览器刷新  driver.refresh()  # 关闭当前页面  driver.close()

  元素等待

  该操作主要是防止界面跳转后,新界面还未完全加载就进行操作步骤,从而导致代码找不到相应的元素而报错。

  强制等待

  通过time库,让程序强制停止一段时间,单位为秒。​​​​​​​

  # 强制等待  import time  time.sleep(1)

  该方法比较死板,比较浪费时间,实际使用不太推荐,可在编写代码时用该方法查看代码运行效果。

  显示等待

  等待某个元素加载完成后继续运行代码,每0.5秒检测一次,如果出现该元素就运行代码,如果一直未出现(直到到达指定的时间),就会返回TimeOutException的错误。​​​​​​​

  from selenium.webdriver.support.wait import WebDriverWait  from selenium.webdriver.support import expected_conditions as EC  WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,'1')))

  优点:比较节省时间,在需要的元素出现时可直接开始运行代码,不必等待网页的全部加载。

  缺点:导入的库太多

  隐式等待

  driver.implicitly_wait(5)

  优点:不需要设定多个参数,也不需要导入库,在元素加载完毕后能够直接运行代码。

  缺点:因为没有明确等待的元素,所以隐式等待需要等待所有元素加载完毕在运行代码,在弱网状态时建议使用显示等待,让需要使用的元素出现时及时运行代码,节约时间。

  鼠标操作​​​​​​​

  # 导入鼠标操作 库包  from selenium.webdriver.common.action_chains import ActionChains  # 鼠标右击  action.context_click(driver.find_element(By.ID,'kw'))  # 鼠标悬停  action.move_to_element(driver.find_element(By.CLASS_NAME,'soutu-btn'))  # 鼠标拖拽 第一个是拖拽目标,第二个是到达地址  action.drag_and_drop(driver.find_element(xxx),driver.find_element(xxx))  # 执行代码  action.perform()

   键盘操作​​​​​​​

  el = driver.find_element(By.ID,'kw')  # 输入内容  el.send_keys("python")  # 全选  el.send_keys(Keys.CONTROL,'a')  # 删除  el.send_keys(Keys.BACK_SPACE)  # 复制  el.send_keys(Keys.CONTROL,'c')  # 粘贴  el.send_keys(Keys.CONTROL,'v')

  下拉框的选择

   该功能用于下拉框的选择,用于网页的’<select>’模块选择。

图片

​​​​​​​

  # 下拉框的库  from selenium.webdriver.support.select import Select  select = Select(driver.find_element(By.CSS_SELECTOR,'[name=city]'))  # 通过index选择  select.select_by_index(0)  time.sleep(2)  # 通过value选择  select.select_by_value('sh')  time.sleep(2)  # 通过文字选择  select.select_by_visible_text('成都')

  滚动条

  Python不能直接调用滚动条,但是可以使用js语言来调用。​​​​​​​

  # 通过js语言进行滑动  # 隐式等待无法滚动,滚动前不能添加隐式等待  time.sleep(2)  js_str = "window.scrollTo(0,10000)"  driver.execute_script(js_str)

  警告框的处理

  该功能主要用于处理网页的报错警告框,例如网站的必读信息、登录过期等消息。​​​​​​​

  # 警告框需要切换到警告框再处理  alert = driver.switch_to.alert  # 打印警告框内容  print(alert.text)  # 取消警告框  alert.dismiss()  # 确定警告框  alert.accept()

  frame的切换

   该功能用于在某些网页中,网页内会内嵌一个网页,此时需要从原本的网页切换到内嵌的网页中,才能对内嵌的网页进行操作。

图片

  driver.switch_to.frame(“frame元素的位置”)

  标签页的切换

   页面标签我们叫做habdle,其中可以通过两种方式获得页面的标签。

图片

​​​​​​​

  # 获取页面 获取当前handle,新打开的页面在所有handle列表的最后面  # 获取浏览器所有页面标签的list  print(driver.window_handles)  # 打印当前的页面标签  print(driver.current_window_handle)

   每个新产生的页面标签都会排到list的后面,无论在浏览器上面怎么显示,新的页面标签就像用list.append()一样加入标签列表中。

  driver.switch_to.window(driver.window_handles[1])

  截图

全屏截图并直接保存:

  driver.get_screenshot_as_file("截图.png")

截图后按照png格式保存为Python的变量:

  shotpng = driver.get_screenshot_as_png()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

Vue2 与 Vue3 的区别有哪些

Vue 2 和 Vue 3 在许多方面都有显著的区别&#xff0c;包括性能、API 设计、功能特性等。以下是它们主要的区别&#xff1a; 1. 响应式系统 Vue 2: 基于 Object.defineProperty: Vue 2 使用 Object.defineProperty 来实现响应式数据。这种方法在处理对象属性时有一定的局限性…

包拯断案 | 数据库从库GTID在变化 为何没有数据写入@还故障一个真相

提问&#xff1a;作为DBA运维的你是否遇到过这些烦恼 1、数据库从库复制链路如何正确配置表过滤信息&#xff1f; 2、数据库从库的GTID在变化&#xff0c;实际却没有数据写入&#xff0c;究竟是什么原因&#xff1f; 心中有章&#xff0c;遇事不慌 作为DBA的你&#xff0c;…

如何构建短视频矩阵?云微客开启多账号协同作战

你有没有疑惑过&#xff0c;为什么有些账号每一次发布视频&#xff0c;都要艾特一下其他账号呢&#xff1f;那些被艾特的账号&#xff0c;你有点进去关注过吗&#xff1f;其实做过运营的都或多或少的接触过矩阵&#xff0c;短视频矩阵的玩法现在也逐步成为了趋势。企业通过多账…

GitHub Copilot Issue in Visual Studio Code “Status Ready (disabled)“

I’m facing an issue with GitHub Copilot in Visual Studio Code, where it’s not suggesting any code. Even though it says “enabled globally” in the extensions tab settings, the icon in the status bar has a diagonal line through it. When I click on the ico…

pyautogui进行点击失效,pyautogui.click()失效

背景&#xff1a;在Pycharm里&#xff0c;使用pythonpyautogui调用 .exe程序文件时候&#xff0c;当程序界面出来之后&#xff0c;鼠标失去反应&#xff0c;用pyautogui进行点击。后面尝试使用图片相似也无法实行点击。 解决方法&#xff1a;运行Pycharm或者其他ide的时候选择…

黑马点评2——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装

文章目录 什么是缓存&#xff1f;添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…

极市开发平台yolov8训练无人机数据集样例数据流程

先进入vscode&#xff0c;进入src_repo文件夹。 第一步&#xff0c;克隆一个比较好的博主的库&#xff1a; GitHub - Incalos/YOLO-Datasets-And-Training-Methods: This project involves making custom datasets for the YOLO series and model training methods for YOLO.…

【openwrt-21.02】T750 openwrt-21.02 pptp拨号失败问题分析及解决方案

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

关于蓝屏查看日志分析原因

一、前提 虽然电脑经常蓝屏&#xff0c;或者发生了蓝屏现象&#xff0c;但是仍然可以进入系统&#xff0c;并且可以进行桌面操作。 二、查看蓝屏日志 1.按下win键&#xff0c;搜索计算机管理。 2.依次点击&#xff1a;系统工具->事件查看器->Windows日志->系统 3.在…

Qt-桌面服务和托盘

t应用程序在用户的桌面环境中表现良好&#xff0c;但某些集成需要额外的&#xff0c;有时是特定于平台的技术。 Qt中的各种类旨在帮助开发人员将应用程序集成到用户的桌面环境中。这些类使开发人员能够在使用跨平台API的同时利用原生服务。 QDesktopServices 访问常用桌面服务的…

Java环境搭建指南:从新手到专家的全方位教程!

Java是一种广泛使用的编程语言&#xff0c;具有跨平台的特性&#xff0c;这意味着只要一次编写&#xff0c;就可以在支持Java的任何系统上运行&#xff0c;无论是Windows、Mac OS还是Linux。要开始使用Java进行开发&#xff0c;首先需要搭建Java开发环境&#xff0c;这包括下载…

【项目二】C++高性能服务器开发——日志系统(日志器,日志级别,日志事件)

知识点备忘录 其实也没啥 操作记录 在乌邦图上写的&#xff0c;先是模仿sylar创建了目录 进入sylar文件夹&#xff0c;有今天写的log.h头文件 其中log_test.cpp是为了测试log.h能否正常运行建的&#xff0c;只是个测试文件 log.h写了三个类&#xff0c;日志级别&#xff0…

PHP一站式解决方案高级房产系统小程序源码

一站式解决方案&#xff0c;高级房产系统让房产管理更轻松 &#x1f3e0;【开篇&#xff1a;告别繁琐&#xff0c;迎接高效房产管理新时代】&#x1f3e0; 你是否还在为房产管理的繁琐流程而头疼&#xff1f;从房源录入、客户咨询到合同签订、售后服务&#xff0c;每一个环节…

计算机网络11——数据库语法2

目录 1、变量 (1)局部变量 (2)会话变量 (3)系统变量 2、判断选择 (1)if选择语法 (2)case选择 3、循环 (1)while循环 (2)其他循环 4、存储过程 5、触发器 6、事务:transaction 事务的特性 使用 1、变量 (1)局部变量 函数里面定义的,变量名 …

【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提

2024年国赛C题第二套解题思路 第一问&#xff1a;2024~2030年农作物的最优种植方案 【问题分析】 题目要求为某乡村在2024~2030年制定农作物的最优种植方案&#xff0c;目的是最大化收益&#xff0c;并需考虑两种销售情况&#xff1a; 1. 超过预期销售量的部分滞销&#xff0…

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化&#xff0c;小程序端不兼容&#xff0c;需要替换持久化 API import { defineStore } from pinia export const useCommonStore defineStore(pack-store, {state: (): State > ({wwInfo: {},globalData: {},timerLock: false, //是…

【LeetCode】05.最长回文子串

题目要求 解题思路 这一类型&#xff08;回文子串&#xff09;主要有两种解决方法&#xff0c;一种是动态规划&#xff0c;另一种是中心拓展算法。 动态规划&#xff1a; 本质问题就是在i-j区间是不是回文的。这样的话我们在 i 和 j 位置的值相等时&#xff0c;判断如下三种情…

SQL-多表查询

1、多表关系 一对多、多对一&#xff1a;在多的一方建立外键&#xff0c;指向一的一方。 多对多&#xff1a;至少两个外键&#xff0c;通过中间表维护。 一对一 2、多表查询概述 3、内连接 4、外连接 5、自连接 6、联合查询 7、子查询 8、多表查询案例 # 1、多表关系 #…

语音测试(一)ffmpeg视频转音频

视频转音频 下载ffmpeg工具进入bin目录cmd进入控制台输入命令 ffmpeg.exe -i ./视频.mp4 ./音频.wav命令说明 ffmpeg -i input.mp4 output.mkv FFmpeg 可能会尝试自动选择合适的编码器对视频和音频进行重新编码&#xff0c;以便适应 MKV 格式的要求ffmpeg -i input.mp4 -c c…

linux 内核代码学习(八)

总体目标&#xff1a;由于fedora10 linux发行版中自带的linux2.6.xx内核源码规模太庞大了&#xff0c;对于想通读内核源码的爱好者来说太困难了&#xff0c;因此选择了linux2.4.20内核来进行测试&#xff08;最终是希望能够实现linux1.0内核的源码完全编译和测试&#xff09;。…