selenium面试题总结
今天有同学问到seleinum面试的时候会问到的问题,随便想了想,暂时纪录一下。欢迎大家在评论中提供更多问题。
1.selenium中如何判断元素是否存在?
selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断。
# 判断元素是否存在try:dr.find_element_by_id('none')except NoSuchElementException:print 'element does not exist'
2.selenium中hidden或者是display = none的元素是否可以定位到?
不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。
3.selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点;
被点击的元素不能被其他元素遮挡;
被点击的元素不能在viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见;
使用element.is_enabled()(python代码)判断元素是否是可以被点击的,如果返回false证明元素可能灰化了,这时候就不能点;
4.如何提高selenium脚本的执行速度?
使用效率更高的语言,比如java执行速度就快过python
不要盲目的加sleep,尽量使用显示等待
对于firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题
chrome浏览器和safari浏览器的执行速度看上去是最快的
可以考虑分布式执行或者使用selenium grid
5.用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
测试专属profile,尽量让静态资源缓存
尽量使用显示等待
尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰
6.你的自动化用例的执行策略是什么?
每日执行:比如每天晚上在主干执行一次
周期执行:每隔2小时在开发分之执行一次
动态执行:每次代码有提交就执行
7.什么是持续集成?
可以自行百度,学习能力自我提升很重要(1079636098)软件测试技术交流群推荐。
8.自动化测试的时候是不是需要连接数据库做数据校验?
一般不需要,因为这是单元测试层做的事情,在自动化测试层尽量不要为单元测试层没做的工作还债。
9.id,name,clas,x path, css selector这些属性,你最偏爱哪一种,为什么?
xpath和css最为灵活,所以其他的答案都不够完美。
10如何去定位页面上动态加载的元素?
显示等待
11.如何去定位属性动态变化的元素?
找出属性动态变化的规律,然后根据上下文生成动态属性。
12.点击链接以后,selenium是否会自动等待该页面加载完毕?
java binding在点击链接后会自动等待页面加载完毕。
13.webdriver client的原理是什么?
selenium的原理涉及到3个部分,分别是
浏览器
driver: 一般我们都会下载driver
client: 也就是我们写的代码
client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client。这就是selenium工作的大致原理。
14.webdriver的协议是什么?
client与driver之间的约定,无论client是使用java实现还是c#实现,只要通过这个约定,client就可以准确的告诉drier它要做什么以及怎么做。
webdriver协议本身是http协议,数据传输使用json。
这里有webdriver协议的所有endpoint,稍微看一眼就知道这些endpoints涵盖了selenium的所有功能。
15.启动浏览器的时候用到的是哪个webdriver协议?
New Session,如果创建成功,返回sessionId和capabilities。
16.什么是page object设计模式?
简单来说就是用class去表示被测页面。在class中定义页面上的元素和一些该页面上专属的方法。
例子
public class LoginPage { private final WebDriver driver; public LoginPage(WebDriver driver) { this.driver = driver; // Check that we're on the right page. if (!"Login".equals(driver.getTitle())) { // Alternatively, we could navigate to the login page, perhaps logging out first throw new IllegalStateException("This is not the login page"); } } // The login page contains several HTML elements that will be represented as WebElements. // The locators for these elements should only be defined once. By usernameLocator = By.id("username"); By passwordLocator = By.id("passwd"); By loginButtonLocator = By.id("login"); // The login page allows the user to type their username into the username field public LoginPage typeUsername(String username) { // This is the only place that "knows" how to enter a username driver.findElement(usernameLocator).sendKeys(username); // Return the current page object as this action doesn't navigate to a page represented by another PageObject return this; } // The login page allows the user to type their password into the password field public LoginPage typePassword(String password) { // This is the only place that "knows" how to enter a password driver.findElement(passwordLocator).sendKeys(password); // Return the current page object as this action doesn't navigate to a page represented by another PageObject return this; } // The login page allows the user to submit the login form public HomePage submitLogin() { // This is the only place that submits the login form and expects the destination to be the home page. // A seperate method should be created for the instance of clicking login whilst expecting a login failure. driver.findElement(loginButtonLocator).submit(); // Return a new page object representing the destination. Should the login page ever // go somewhere else (for example, a legal disclaimer) then changing the method signature // for this method will mean that all tests that rely on this behaviour won't compile. return new HomePage(driver); } // The login page allows the user to submit the login form knowing that an invalid username and / or password were entered public LoginPage submitLoginExpectingFailure() { // This is the only place that submits the login form and expects the destination to be the login page due to login failure. driver.findElement(loginButtonLocator).submit(); // Return a new page object representing the destination. Should the user ever be navigated to the home page after submiting a login with credentials // expected to fail login, the script will fail when it attempts to instantiate the LoginPage PageObject. return new LoginPage(driver); } // Conceptually, the login page offers the user the service of being able to "log into" // the application using a user name and password. public HomePage loginAs(String username, String password) { // The PageObject methods that enter username, password & submit login have already defined and should not be repeated here. typeUsername(username); typePassword(password); return submitLogin(); } }
17.什么是page factory设计模式?
实际上是官方给出的java page object的工厂模式实现。
18.怎样去选择一个下拉框中的value=xx的option?
使用select类,具体可以加群了解
19.如何在定位元素后高亮元素(以调试为目的)?
使用javascript将元素的border或者背景改成黄色就可以了。
20.什么是断言?
可以简单理解为检查点,就是预期和实际的比较
如果预期等于实际,断言通过,测试报告上记录pass
如果预期不等于实际,断言失败,测试报告上记录fail
21.如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?
哪个熟悉用哪个
如果都不会,团队用哪种语言就用那种
22.page object设置模式中,是否需要在page里定位的方法中加上断言?
一般不要,除非是要判断页面是否正确加载。
Generally don't make assertions
23.page object设计模式中,如何实现页面的跳转?
返回另一个页面的实例可以代表页面跳转。
// The login page allows the user to submit the login form public HomePage submitLogin() { // This is the only place that submits the login form and expects the destination to be the home page. // A seperate method should be created for the instance of clicking login whilst expecting a login failure. driver.findElement(loginButtonLocator).submit(); // Return a new page object representing the destination. Should the login page ever // go somewhere else (for example, a legal disclaimer) then changing the method signature // for this method will mean that all tests that rely on this behaviour won't compile. return new HomePage(driver); }
24.自动化测试用例从哪里来?
手工用例的子集,尽量
简单而且需要反复回归
稳定,也就是不要经常变来变去
核心,优先覆盖核心功能
25.你觉得自动化测试最大的缺陷是什么?
实现成本高
运行速度较慢
需要一定的代码能力才能及时维护
26.什么是分层测试?
画给他/她看。
27.webdriver可以用来做接口测试吗?
不用纠结,不可以。
28.selenium 是否可以调用js来对dom对象进行操作?
Could selenium call js for implementation dom object directly?
是
29.selenium 是否可以向页面发送鼠标滚轮操作?
Could selenium send the action of mouse scroll wheel?
不能
30selenium 是否可以模拟拖拽操作?
Does selenium support drag and drop action?
可以
31.selenium 对下拉列表的中的选项进行选择操作时,需要被操作对象的标签是什么?
When Selenium selects the option in selenium, What tag the DOM object should be?
select
32.selenium 上传文件操作,需要被操作对象的type属性是什么?
When Selenium upload a file, what value of type of the DOM object should be?
file
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
相关文章:
selenium面试题总结
今天有同学问到seleinum面试的时候会问到的问题,随便想了想,暂时纪录一下。欢迎大家在评论中提供更多问题。 1.selenium中如何判断元素是否存在? selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素异常捕获…...
⑧电子产品拆解分析-1拖4USB拓展坞
⑧电子产品拆解分析-1拖4USB拓展坞 一、功能介绍二、电路分析以及器件作用1、内部电路拆解三、参考资料学习一、功能介绍 ①USB2.0一拖四通讯;②具备OTG功能,可适配大部分USB接口设备;二、电路分析以及器件作用 1、内部电路拆解 分析:❤️ ❤️ ❤️ 主控是MA8601 USB 2.0…...
月度精华汇总 | 最新XR行业资讯、场景案例、活动都在这一篇里啦!
在过去的一个月中,平行云为您带来了关于XR领域的一系列精彩文章,涵盖了行业资讯、应用案例,市场互动,帮助您掌握XR领域最新动态,了解实时云渲染、Cloud XR技术的价值,以及平行云实时云渲染解决方案LarkX…...
Redis实战案例1-短信登录
Redis的共享session应用 1. 项目的相关工作 导入sql文件 找到对应的sql文件即可 基本表的信息 基本架构 导入对应的项目文件,启动相关的service服务; 在nginx-1.18.0目录下启动命令行start nginx.exe; 2. 基于session实现登录的流程 这里利用到Javaweb中…...
华为OD机试真题 JavaScript 实现【找终点】【2023 B卷 100分】,附详细解题思路
一、题目描述 给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,所使用的最少步骤数。 要求: 第一步必须从第一元素开始,且1 < 第一步的步长 &…...
详解数据仓库数据湖及湖仓一体
比别人更快接收好文章 随着近几年数据湖概念的兴起,业界对于数据仓库和数据湖的对比甚至争论就一直不断。有人说数据湖是下一代大数据平台,各大云厂商也在纷纷的提出自己的数据湖解决方案,一些云数仓产品也增加了和数据湖联动的特性。 但是…...
基于注解切换、Hikari实现的SpringBoot动态数据源(支持JNDI)
实现效果 先说效果,要实现方法级别注解切换当前数据源,不设置注解时走默认数据源,同时支持JNDI源。 总体思路 Spring框架中存在一个抽象类AbstractRoutingDataSource,他是一个可以动态选择当前DataSource的路由类,我…...
Java中的动态链接VS操作系统动态链接
在操作系统OS中为了优化内存的使用会采用一种动态链接方式,一个文件想要在操作系统中运行必须经过编译、汇编译、链接、装载等步骤。可以参考Java程序是怎么跑起来的。本篇主要讲解Java栈帧中动态链接部分与操作系统的的动态链接的区别与联系 操纵系统为什么需要动态…...
深入理解Linux虚拟内存管理(七)
系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理(一) 深入理解Linux虚拟内存管理(二) 深入理解Linux虚拟内存管理(三) 深入理…...
GSR II 智能速度辅助系统的型式认证和系统作为独立技术单元的型式认证测试流程和技术要求
智能速度辅助系统ISA的型式认证和系统作为独立技术单元的型式认证测试流程和技术要求 补充欧洲议会和欧洲理事会第2019/2144号条例,为机动车智能速度辅助系统的型式认证和这些系统作为独立技术单元的型式认证规定了详细的测试程序和技术要求,并修订该条例的附件二 (1)(EU…...
工厂方法模式(五)
过气的,终究是过气了 上一章简单介绍了工厂模式(四), 如果没有看过,请观看上一章 一.工厂方法模式 工厂方法模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 将类的实例化(具体产品的创建&…...
力扣笔记(每日随机一题)——最佳买卖股票时机含冷冻期
问题(中等) 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后&a…...
yolov5 6.1 关于 tensorrt 加速的使用以及问题说明
文章目录 1. 参考连接2. 使用说明2.1 导出加速模型2.1 使用加速模型2.2 加速参数对比 3. 问题说明3.1 在 Tensorrt 8.4.1.5 版本上使用 export.py 导出失败的问题3.2 把模型文件由 best.pt 更换成加速后的 best.engine 后,执行推理时标注的类别名不正确的问题3.3 导…...
SVR(支持向量机)用法介绍
一、SVR回归介绍 SVR(Support Vector Regression)是支持向量机(SVM)在回归问题中的应用。与SVM分类模型相似,SVR也是一种非概率性算法,通过使用核函数将数据映射到高维空间,并在该空间上寻找最优的超平面与训练数据之间的间隔最大化…...
是面试官放水,还是公司实在是太缺人?这都没挂,腾讯原来这么容易进···
本人211非科班,之前在字节和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到腾讯可以再给我一次机会,还是挺开心的。 本来以为有个机会就不错啦!没想到能成功上岸,在这里要特别感谢帮我内推的同学&…...
算法模板(5):数学(1):数学知识(1)
数论 整数的整除性 [x]表示不超过x的最大整数,叫做取整函数或高斯函数。设整数a,b不同时为零,则存在一对整数m,n,使得 ( a , b ) a m b n (a, b) am bn (a,b)ambn。注:a和b的最大公因数会写成 (a, b)…...
电子行业 K 公司对接 Nexperia EDI 项目案例
项目背景 Nexperia 是一家全球领先的半导体制造商,专注于提供高性能、高可靠性和创新性的半导体解决方案。公司成立于2017年,是前飞思卡尔半导体业务的一部分,并在全球范围内拥有多个设计、研发和生产基地。 Nexperia 使用 EDI(…...
chatgpt赋能python:Python如何将英文转化为中文的最佳方法
Python如何将英文转化为中文的最佳方法 介绍 在现代全球化社会中,国与国之间的交流越来越频繁,相应的语言翻译工具的需求也愈发迫切。Python是一种易于学习、快速上手的编程语言,适合初学者和经验丰富的程序员使用,在语言翻译方…...
知道这些英文文档翻译的方式吗
在工作中,大家有没有遇到领导交给你一份外语的文档,要你去观看和理解,但是我们看不太懂或者没啥时间去一点点翻译怎么办呢?我们就需要有工具来将文档翻译,它是一项非常实用和便捷的功能,它可以将文档中的文…...
供应链安全
供应链安全 目录 文章目录 供应链安全目录本节实战可信任软件供应链概述构建镜像Dockerfile文件优化镜像漏洞扫描工具:Trivy检查YAML文件安全配置:kubesec准入控制器: Admission Webhook准入控制器: ImagePolicyWebhook关于我最后…...
华硕天选4原装Windows11系统带ASUSRECOVERY恢复工厂模式安装
华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件,奥创Myasus Recovery 文件地址https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8Vqjqw?pwd3fs8 提取码:3fs8 文件格式:5个底包(HDI KIT COM MCAFEE EDN) 1个引导工具TLK 支持ASUSRECOVERY型…...
数据库期末复习(8)并发控制
笔记 数据库DBMS并发控制(1)_旅僧的博客-CSDN博客 数据库 并发控制(2)死锁和意向锁_旅僧的博客-CSDN博客 同一个对象不能既有slock又有xlock; 冲突可串行化和锁 怎么判断是否可以进行冲突可串行化:简便的方法是优先图 只有不同对象和同一对象都是读才不能发生非串行化调…...
一文说透:低代码开发平台和零代码平台区别是什么?
低代码开发平台和零代码平台区别是什么? 一个简单的例子就可以解释清楚。 假设你想入住一套新房,回看住房变迁史: 最原始方式是:自己建造往后一点,交付“毛坯房”:开发商统一建小区,不需要自…...
4.将图神经网络应用于大规模图数据(Cluster-GCN)
到目前为止,我们已经为节点分类任务单独以全批方式训练了图神经网络。特别是,这意味着每个节点的隐藏表示都是并行计算的,并且可以在下一层中重复使用。 然而,一旦我们想在更大的图上操作,由于内存消耗爆炸,…...
pymongo更新数据
使用 PyMongo,可以通过以下步骤将查询到的记录进行更新: 下面是一个简单的示例代码片段,展示如何向名为users的集合中的所有文档添加一个新字段age。 import pymongo # 连接 MongoDB client pymongo.MongoClient("mongodb://localh…...
手机软件测试规范(含具体用例)
菜单基本功能测试规范一、短消息功能测试规范测试选项操作方法观察与判断结果创建、编辑短消息并发送书写短消息1、分别使用菜单或快捷方式进入书写短消息是否有异常; 2、输入0个字符,选择、输入号码发送,应成功; 3、输入1个中文…...
mysql having的用法
having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数生存。 SQ…...
大数据需要学习哪些内容?
大数据技术的体系庞大且复杂,每年都会涌现出大量新的技术,目前大数据行业所涉及到的核心技术主要就是:数据采集、数据存储、数据清洗、数据查询分析和数据可视化。 Python 已成利器 在大数据领域中大放异彩 Python,成为职场人追求…...
【c++】static和const修饰类的成员变量或成员函数
目录 1、静态成员变量 2、静态成员函数 3、常函数 4、常对象 当我们使用c的关键字static修饰类中的成员变量和成员函数的时候,此时的成员变量和成员函数被称为静态成员。 静态成员包含: 静态成员变量静态成员函数 1、静态成员变量 静态成员变量有…...
DVWA-9.Weak Session IDs
大约 了解会话 ID 通常是在登录后以特定用户身份访问站点所需的唯一内容,如果能够计算或轻松猜测该会话 ID,则攻击者将有一种简单的方法来访问用户帐户,而无需暴力破解密码或查找其他漏洞,例如跨站点脚本。 目的 该模块使用四种…...
樟木头的建网站公司/开网站怎么开
一、什么是爬虫 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。 二、Python爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序(爬取的有价值…...
wordpress5.1/外贸推广建站
C进阶-继承零、前言一、继承的概念和定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承和友元六、继承和静态成员七、菱形继承和虚拟继承八、继承和组合九、继承相关面试题零、前言 从本章开始,我们已经达到了C的入门水平&#…...
网站制作网站/深圳优化公司
在Qtpro文件中添加Qtgui QImage的帮助中写的很清楚 Header: #include <QImage> qmake: QT gui...
网站设置了跳转被qq拦截/百度推广的五大优势
blender是免费开源的荷兰3D建模软件,对中文有很好的支持,有Windows,Linux,Mac等不同平台的版本,安装文件不到20M,运行其中某些脚本需要Python环境的支持,建议安装Python环境。软件界面独特,可以进行建模、渲…...
品牌网站建设可信大蝌蚪/seo经验是什么
In [20]: pivot_df data_df.pivot(index‘userNum’, columns‘subjectCode’, values‘score’) https://blog.csdn.net/CoderPai/article/details/83584185...
做网站和做小程序有什么不同/河南网络推广公司
在WPF中关于RichEditControl的使用,以下代码是我采用信息发布进行简单的测试。 1、新增一篇文章,文章中包含文本、图片等信息,点击保存按钮,即可发布信息。 2、在数据行上,点击查看按钮,即可看到该文章的…...