当前位置: 首页 > 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" ,...

bat批处理命令

一、 什么是 .bat 文件?.bat 文件是一个文本文件,里面包含了一系列 CMD(命令提示符) 命令。当你双击这个文件时,系统会按顺序逐条执行里面的命令。二、 如何开始?创建文件:新建一个文本文件&…...

LiTmall:如何用Spring Boot + Vue + 微信小程序构建高效开源电商系统?

LiTmall:如何用Spring Boot Vue 微信小程序构建高效开源电商系统? 【免费下载链接】litemall linlinjava/litemall: LiTmall 是一个基于Spring Boot MyBatis的轻量级Java商城系统,适合中小型电商项目作为基础框架,便于快速搭建…...

OpenClaw+GLM-4.7-Flash:智能客服机器人搭建指南

OpenClawGLM-4.7-Flash:智能客服机器人搭建指南 1. 为什么选择这个技术组合? 去年夏天,我接手了一个小团队的客服系统改造项目。团队只有5个人,却要处理日均300的客户咨询。传统客服系统要么太贵,要么定制化程度不够…...

Gemini 3.1 Pro官网架构革新解析:MoE稀疏性、多模态统一表示与技术实现

对于追求前沿AI模型底层逻辑的研究者与工程师而言,2026年Google发布的Gemini 3.1 Pro不仅仅是一次性能迭代,更是在混合专家系统稀疏性、原生多模态统一表示及动态计算分配等核心架构上的一次深度演进。 要零门槛、高自由度地探究其技术本质,…...

CVPR/ICML/TMI顶会风向标:医学图像分割三大落地范式,从模型精调到临床闭环

1. 医学图像分割的临床落地挑战与范式转变 医学图像分割作为AI在医疗领域最成熟的应用之一,正经历着从实验室精度竞赛到临床实用落地的关键转型。我在参与多家三甲医院PACS系统智能化改造时发现,临床医生对算法的需求呈现明显的"三高"特征&…...

城市开车GPS总飘?试试给惯性导航(INS)加个“车轮锁”:NHC/ODO约束原理通俗解读

城市开车GPS总飘?试试给惯性导航(INS)加个“车轮锁”:NHC/ODO约束原理通俗解读 你是否遇到过这样的场景:开车穿过高楼林立的CBD时,车载导航突然开始"鬼畜漂移"?或是驶入隧道后&#x…...

别再死记硬背了!用5分钟搞懂NPN和PNP三极管的电流流向(附快速判断技巧)

5分钟掌握NPN与PNP三极管的电流奥秘:从生活场景到实战技巧 记得第一次拆解收音机时,那些黑色的小方块上延伸出的金属腿让我一头雾水——它们看起来平平无奇,却能控制电流的放大与开关。直到导师用浇花的水管作比喻,三极管的秘密才…...

低资源部署DeepSeek-R1:苹果A17实测120 tokens/s推理速度

低资源部署DeepSeek-R1:苹果A17实测120 tokens/s推理速度 1. 模型概述 DeepSeek-R1-Distill-Qwen-1.5B是DeepSeek团队基于80万条R1推理链样本对Qwen-1.5B进行知识蒸馏得到的轻量级模型。这款"小钢炮"模型仅1.5B参数却能达到7B级模型的推理能力&#xff…...

基于Whisper-large-v3的语音搜索引擎开发

基于Whisper-large-v3的语音搜索引擎开发 你有没有遇到过这种情况?手头有几百个小时的会议录音、课程录像或者播客音频,想找其中某个人说过的一句话,或者某个特定的知识点,结果只能从头到尾听一遍,费时又费力。或者&a…...

数据库扩展实战:如何用ShardingCore实现高性能分库分表

数据库扩展实战:如何用ShardingCore实现高性能分库分表 【免费下载链接】sharding-core high performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库读写分离…...