selenium面试题总结

2021年11月22日 阅读数:7
这篇文章主要向大家介绍selenium面试题总结,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
 

今天有同窗问到seleinum面试的时候会问到的问题,随便想了想,暂时纪录一下。欢迎你们在评论中提供更多问题。javascript

 

1.selenium中如何判断元素是否存在?css

selenium中没有提供原生的方法判断元素是否存在,通常咱们能够经过定位元素+异常捕获的方式判断。java

```python

# 判断元素是否存在try:web

    dr.find_element_by_id('none')except NoSuchElementException:面试

    print 'element does not exist'chrome

```数据库

 

2.selenium中hidden或者是display = none的元素是否能够定位到?json

不能够,selenium不能定位不可见的元素。display=none的元素其实是不可见元素。c#

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