测试八股文-Selenium
测试八股文-Selenium
总结了一些selenium的常见问题,欢迎评论区补充,如需教学辅导可私信作者
什么是Selenium
?
Selenium
是一个自动化测试框架,用于模拟用户在Web应用程序中的交互行为。它支持多种语言,包括Java、Python、Ruby等
Selenium
有哪些组件?
Selenium由三个组件组成:Selenium IDE
、Selenium WebDriver
和Selenium Grid
- Selenium IDE是一个浏览器插件,用于录制和回放用于在Web应用程序中的交互行为
- Selenium WebDriver是一个用于编写自动化测试脚本的API,它支持多种编程语言
- Selenium Grid是一个分布式的测试工具,用于在多台计算机上并行运行测试
什么是WebDriver
?
WebDriver
是Selenium的一个API,用于编写自动化测试脚本。它提供了一组方法,用于模拟用户在Web应用程序中的交互行为,如点击链接,填写表单,提交表单等。
WebDriver
有哪些常用的方法?
- get:打开指定url
- find_element:查找页面上的元素
- send_keys:向页面上的元素发送输入
- click:点击页面上的元素
- submit:提交表单
- get_attribute:获取元素的属性值
- text:获取元素的文本内容
如何处理弹出窗口?
-
浏览器的弹窗有三种:
Alert
(仅有确认按钮)、Confirm
(确认或取消)、Prompt
(带有输入框),我们无法通过元素定位来操作driver.switch_to.alert.accept() //确认,三种弹窗都可以 driver.switch_to.alert.dismiss() //取消、不同意 confirm和prompt可以使用 dirver.switch_to.alert.text //打印弹窗信息 driver.switch_to.alert.send_keys(text) //向弹窗中输入内容
如何模拟鼠标和键盘操作?
-
操作键盘可以使用
selenium.webdriver.common.keys
包 -
操作鼠标可以使用
selenium.webdriver.common.action_chain
包move_to_element():将鼠标移动至指定的element对象 click():执行单击操作 click_and_hold():单击不释放 release():释放单击 double_click():双击操作 context_click() :右键单击 perform():立即执行操作
如何处理下拉框?
使用selenium.webdriver.support.select
下的Select类,可以通过以下三种方式对元素进行选择
- 通过索引:
Select(el).select_by_index(1)
- 通过value属性值:
Select(select_element).select_by_value("1990")
- 通过显示文本进行选择:
Select(el).select_by_visible_text("2020")
如何在多个窗口间进行切换?
- 先获取所有的创建,调用
driver.window_handles
会返回一个窗口数组 - 如果需要获取当前窗口可以调用
chrome.current_window_handle
- 如果需要切换窗口可以调用
driver.switch_to_window(windows[index])
,浏览器每打开一个窗口会在列表尾部添加一个窗口对象,index=-1时则会切换到新打开的窗口
如何进入和退出iFrame
进入
1.使用iframe的name属性进行切换drvier.switch_to.frame("attr_name")
2.先找到该iframe
,然后再切换driver.switch_to.frmae(driver.find_element_by_name("attr_name"))
3.使用索引找到该iframedriver.switch_to.frame(4)
退出
1.如果需要切换到最外层则使用:driver.switch_to.default_content()
2.切换到上一层的iframe
driver.switch_to.parent_frame()
Selenium中的八大选择器
查找方式 | 方法名称 |
---|---|
根据ID属性 | find_element_by_id |
根据name属性 | find_element_by_name |
根据超链接的文字信息 | find_element_by_link_text |
根据超链接的部分文字信息 | find_element_by_partial_link_text |
根据tag名称 | find_element_by_tag_name |
根据class名称 | find_element_by_class_name |
根据xpath表达式 | find_element_by_xpath |
根据css选择器 | find_element_by_css_selector |
Selenium
如何执行JS
脚本
selenium中提供了操作js
脚本的方法
driver.execute_script(script,args)
Selenium
如何截取屏幕
driver.get_screenshot_as_file(path)
Selenium
三种等待
-
隐式等待:就是在创建driver时,为浏览器对象创建一个等待时间,这个方法得不到某个元素就等待一段时间,直到拿到某个元素位置,在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部不断的刷新页面去寻找我们需要的元素,只写一次,全局有效,针对于页面加载
driver.implicitly_wait()
-
显示等待:明确的要等到某个元素的出现,等不到就一直等,除非在规定的时间之内都没找到
需要使用
selenium.webdriver.support.expected_conditions
和selenium.webdriver.support.wait.WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait # 显示等待 # 在当前浏览器,最长等待20s, 每间隔1s确认一次,直到,传入的元素定位是可见的 username_loc = (By.NAME, "username") #构建WebDriverWait对象,调用until方法 WebDriverWait(driver,20,1).until(EC.visibility_of_element_located(username_loc)
-
强制等待:
python
time.sleep(timer)
Java
Thread.sleep(time) TimeUnit.时间单位.sleep(time)
元素定位不到可能是为什么?
UI
被改动- 网络卡顿
- 元素被嵌套再
iframe
中 - 元素被嵌到
shadow-root
中 - 页面元素是动态的(每次刷新后元素属性会发生变化)
- 由于元素被遮挡,需要通过js点击
- 定位表达式有误
相关文章:
测试八股文-Selenium
测试八股文-Selenium 总结了一些selenium的常见问题,欢迎评论区补充,如需教学辅导可私信作者 什么是Selenium? Selenium是一个自动化测试框架,用于模拟用户在Web应用程序中的交互行为。它支持多种语言,包括Java、Py…...
数据库第8章作业
ps:本篇只为记录和分享 一. 单选题(共20题) 1. (单选题)E-R图是数据库设计的工具之一,它适用于建立数据库的( )。 A. 概念模型B. 物理模型C. 逻辑模型D. 结构模型 我的答案: A :概念模型; 2. (单选题)数…...

【OpenCV实现平滑图像金字塔,轮廓:入门】
文章目录 概要图像金字塔轮廓:入门 概要 文章内容的概要: 平滑图像金字塔: 图像金字塔是什么? 图像金字塔是指将原始图像按照不同的分辨率进行多次缩小(下采样)得到的一系列图像。这种处理方式常用于图像…...

Java JVM垃圾回收确定垃圾的两种方式,GC Root
文章目录 前言一、如何确定是垃圾?引用计数法根可达路径法 二、GC Root1、以下可作为GC Root对象2、判断可回收:GC Root不可达3、真正宣告对象死亡需经过两次标记过程(重要) 前言 对于Java两种确定对象为可回收的两种方式&#x…...
java集合之List接口实现类常用方法详解
目录 一、List集合概述 二、ArrayList类 三、ArrayList常用方法实例 四、LinkedList类 五、Linkedist常用方法实例 一、List集合概述 java.util.List接口继承自Collection接口,是单列集合的一个分支,通常将实现了List接口的对象称为List集合&#x…...

三分钟带你了解JS、原型、原型链
1.什么是JS? JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象; 它是基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式; 白话一点说就是…...

C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现
目录 腾讯云人脸核身技术 Craneoffice.net 采用的识别方式 1、活体人脸核身(权威库): 2、活体人脸比对: 3、照片人脸核身(权威库): 调用成本 百度云身份证识别 调用成本 相关结合点 核心代码 实现调用人脸核身API的示例 实现调用身…...
LeetCode每日一题——275. H-Index II
文章目录 一、题目二、题解 一、题目 Given an array of integers citations where citations[i] is the number of citations a researcher received for their ith paper and citations is sorted in ascending order, return the researcher’s h-index. According to the…...
项目添加EZOpenSDK之后就开始报错:could not build module foundation等
最近修改一个老项目,出现了一个报错问题。困扰了很久。现在终于找到解决方法了。分享一下。 正常的项目,使用pod引入EZOpenSDK之后就开始报错了,下面就是错误信息: could not build module foundation错误 could not build modul…...

“智能科技·链接未来”2024中国国际人工智能产品展览会·智博会
2024年中国国际人工智能产品展览会(简称世亚智博会)将于3月份在上海举办,6月份在北京举办。本届展会以“智能科技链接未来”为主题,将集中展示全球前沿的人工智能技术和应用,以及人工智能在各个领域的新成果。 本届展会…...

华为NAT配置实例(含dhcp、ospf配置)
一、网络拓朴如下: 二、要求:PC1 能访问到Server1 三、思路: R2配置DHCP,R2和R1配OSPF,R1出NAT 四、主要配置: R2的DHCP和OSPF: ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…...

怎样才能把视频号的视频保存到相册,怎么下载视频号视频两个方法轻松解决
在微信客户端想要下载视频号视频却不知道怎么保存到本地相册?让不少网友犯了难,不用在纠结怎么样才可以将视频号视频下载下来,今天就分享两个小程序将视频号视频提取出来,另外在告诉大家一个下载技巧,一定要看到到结尾…...

软考系统架构师知识点集锦七:计算机系统基础知识
一、考情分析 二、考点精讲 2.1计算机系统概述 2.1.1计算机系统组成 2.1.2 存储系统 时间局部性:指程序中的某条指令一旦执行,不久以后该指令可能再次执行,典型原因是由于程序中存在着大量的循环操作。 空间局部性:指一旦程序访问了某个存储单元,不久…...
k8s节点已有镜像,但Pod一直在拉取镜像时卡着
Pod状态为ContainerCreating,查看日志提示pull镜像,但该镜像在Node节点已经存在,且拉取策略为IfNotPresent 解决:重启kubelet...

用图说话——流程图进阶
目录 一、基本流程图 二、时序流程图 一、基本流程图 经常阅读歪果仁绘制的流程图,感觉比较规范,自己在工作中也尝试用他们思维来绘图,这是一个小栗子: 二、时序流程图 在进行Detail设计过程中,一般的绘图软件显得…...

深入了解 Elasticsearch 8.1 中的 Script 使用
一、什么是 Elasticsearch Script? Elasticsearch 中的 Script 是一种灵活的方式,允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…...

激光雷达点云基础-点云滤波算法与NDT匹配算法
激光雷达点云处理在五年前就做了较多的工作,最近有一些新的接触发现激光雷达代码原理五年前未见重大更新,或许C与激光雷达结合本身就是比较高的技术门槛。深度学习调包侠在硬核激光雷达技术面前可以说是完全的自愧不如啊。 1、点云滤波 在获取点云数据…...

回收废品抢派单小程序开源版开发
回收废品派单抢派单小程序开源版开发 在这个废品回收抢单派单小程序开源版开发中,我们将构建一个专业且富有趣味性的平台,以深度的模式来重塑废品回收体验。 我们将提供一个会员注册功能,用户可以通过小程序授权注册和手机号注册两种方式快…...

粤嵌实训医疗项目--day04(Vue + SpringBoot)
往期回顾 粤嵌实训医疗项目--day03(Vue SpringBoot)-CSDN博客粤嵌实训医疗项目day02(Vue SpringBoot)-CSDN博客粤嵌实训医疗项目--day01(VueSpringBoot)-CSDN博客 目录 一、用户详细信息查询 (查询信息与…...

redis加入window服务及删除
1、命令redis-server.exe --service-install redis.windows.conf,在服务中可配置自动启动 删除redis服务,先停止redis服务运行,管理员cmd模式,sc delete "redis" ,...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...