当前位置: 首页 > news >正文

测试八股文-Selenium

测试八股文-Selenium

总结了一些selenium的常见问题,欢迎评论区补充,如需教学辅导可私信作者
什么是Selenium

Selenium是一个自动化测试框架,用于模拟用户在Web应用程序中的交互行为。它支持多种语言,包括Java、Python、Ruby等

Selenium有哪些组件?

Selenium由三个组件组成:Selenium IDESelenium WebDriverSelenium 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_conditionsselenium.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" ,...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...