selenium面试题总结

news2024/11/23 19:26:05

今天有同学问到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

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取  

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

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

相关文章

Java网络开发(Tomcat同步数据增删改查)—— 用Jsp语法实现同步请求的 增删改查

目录 引出显示所有数据到前端(1)前端代码:list.jsp(2)后端代码:CompanyListServlet.java 新增数据---转发类型信息---新增信息业务(1)在list.jsp页面点击添加(2&#xff…

don‘t have write permissions for the /System/Library/Frameworks/Ruby.framework

don’t have write permissions for the /System/Library/Frameworks/Ruby.framework sudo gem install sigh或sudo gem install -n /usr/local/bin cocoapods --pre出现: appleCQIMAC-L1A9Q05R ~ % sudo gem update --system Password: Updating rubygems-update F…

社会心理学(1) 社会心理学的定义

今天开始 我们一起学习一门课程 社会心理学 社会心理学 他是 应用心理学 或者 心理学专业的一个必修课 吴江霖教授说过 心理学应该分为两大分支 生理心理学 和 社会心理学 如果认同他的观点 那么 社会心理学可谓是相当重要了 社会心理学的定义之广可以说 有多少社会心理学教…

书山有路勤为径 学海无涯苦作舟(AI引领时代浪潮)

书山有路勤为径 学海无涯苦作舟 AI模型是如何训练的? 数据准备 在训练AI模型之前,需要准备大量的数据集。数据集的质量和多样性直接影响模型训练的效果。数据集准备的主要工作包括: 数据清洗:清除数据中的噪声、错误、重复等不…

STM32单片机(六)TIM定时器 -> 第一节:TIM定时中断

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

震惊!kratos的make命令windows下无法使用

Make 命令 kratos想在windows下开发的舒服,各种 命令必须得支持,不然一个protoc就是噩梦,好在官方内置了一些make api这样的命令,坏在windows不支持make命令😂 MinGw 百度一搜大概是MinGW 这么个东西,这…

【Linux】软硬链接与动静态库

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 🌹 相关文章: 【Linux】动静态库以及动静态链接 【Linux】基础IO_文件系统 软硬链接 软链接 我们知道,每一个文件都会有自己…

TypeScript学习(1)- ts基础配置介绍

目录 TypeScript是什么? TypeScript开发环境搭建 TypeScript是什么? 以JavaScript为基础构建的语言一个JavaScript的超集typescript扩展了JavaScript,并添加了类型可以在任何支持JavaScript的平台中执行TS不能被js解析器直接执行&#xff0…

【多线程与高并发】- 锁的机制与底层优化原理

锁的机制与底层优化原理 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 一个有梦有戏的人 怒放吧德德 🌝分享学习心得,欢迎指正&#…

c语言第二课------地基打牢,基础打紧,不可放弃

作者前言: 欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda 目录 变量的作用域和生命周期 常量 字符串转义字符注释 选择语句 循环语句 函数 _________________________________________________ 这次我们接着上一篇博客,我们接着来继续C语言的学习 变量的作用…

四十六、B+树

这一次我们来介绍B树。 一个m阶的B树具有如下几个特征&#xff1a; 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子&#xff0c;其中 m/2 < k < m 3.每一个叶子节点都包含k-1个元素&#xff0c;其中 m/2 < k < m 4.所有的叶子结点都位于同一层。…

Python学习ing

Python中 字符串不能通过 &#xff0c;把 数字等非字符串&#xff0c;进行拼接&#xff0c; 但Javascript中是可以的。 会把数字自动转换成字符串&#xff0c; 但python 提供了占位符 %s % 占位符 city "徐州" age 20 message "我是%s人,今天%s岁" …

面向对象继承

2. 面向对象特征二&#xff1a;继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承&#xff0c;多个类中存在相同属性和行为时&#xff0c;将这些相同的内容抽取到单独一个类&#xff08;父类&#xff09;中&#xff0c;然后所有的类继…

新能源汽车保养vr仿真教学软件为职业培训带来新的思路和方法

电动车电池更换VR虚拟体验是一种利用VR虚拟现实技术实现对电动车电池更换进行模拟仿真演示和实操训练的虚拟仿真实验教学课件&#xff0c;相比传统教学模式&#xff0c;有效提高学生的实践能力和技能水平。 通过VR技术模拟现场&#xff0c;使培训人员可以身临其境滴观摩操作过程…

(二)Liunx下ElasticSearch快速搭建

1.下载安装 1).环境准备&#xff1a; 操作系统&#xff1a;centos7 es版本&#xff1a;8.8.1 jdk:17 es与jdk等兼容支持查看 2).下载安装包上传到服务器&#xff0c;官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3).解压文件 tar -zxvf elasticsearch-8.8.…

信息差永远存在,聪明的人也永远能利用信息差赚钱

信息的差异永远存在&#xff01; 例子一&#xff1a; 在2018年&#xff0c;某宝在央视春晚中成功地获得了广告名额&#xff0c;但与此同时&#xff0c;上百位工程师没想到的是&#xff0c;这是一个恶梦的开始&#xff01; 由于春晚当晚的访问人数过多&#xff0c;服务器立刻发…

模块化相关知识点

这里写目录标题 模块化概述基本使用&#xff08;包的跨模块使用&#xff09;介绍代码演示 模块服务的使用&#xff08;跨模块接口的实现&#xff09;简介具体代码 模块化 概述 基本使用&#xff08;包的跨模块使用&#xff09; 介绍 代码演示 首先 要在第一个模块里&#xf…

路径规划算法:基于算术优化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于算术优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于算术优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

SpringCloud公共模块项目搭建(二)

我们新建module公共模块项目 microservice-common&#xff0c;主要是放一些其他项目公用的东西&#xff0c;比如实体类&#xff0c;工具类等等&#xff1b; 新建module 勾选 create a simple project 取下module 名称 mircoservice-common 这里用默认的jar pom.xml 加下 jpa…

SpringBatch从入门到实战(四):表结构

batch_job_instance -> batch_job_execution/batch_job_execution_params -> batch_job_execution_context 一&#xff1a;batch_job_instance 作业实例 同一个作业&#xff0c;同一套作业参数 唯一标识一条记录&#xff0c;首次启动时插入一条数据。 字段描述JOB_IN…