selenium面试

1、如何去定位属性动态变化的元素?

 属性动态变化是指该element没有固定的属性值,所以只能通过相对位置定位 。比如通过xpath的轴, parent/following-sibling/precent-sibling等    另外也可以尝试findbyelements遍历

2、有几种元素常用定位方式,分别是?你最偏爱哪一种,为什么?

8种:id、name、class name、tag name、link text、partial link text、xpath、css selector 

偏爱哪一种?

答:我最常用的是xpath(或CssSelector)因为很多情况下,html标签的属性不够规范,无法通过单一的属性定位,这个时候就只能使用xpath可以去重实现定位唯一element事实上定位最快的是Id,

因为id是唯一的,然而大多数开发并没有设置id。

3、怎么提高selenium脚本的自动化执行效率?

1、优化测试用例,尽可不使用 sleep,减少使用ImplicitlyWai。

2、多使用selenium的WebDriverWait/FluentWait,这样可以优化等待时间。

3、减少不必要的操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。

4、中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。

5、使用性能好的电脑

4、用例在运行过程中经常会出现不稳定的情况,也就是这次可以通过,下次无法通过了,如何提高用例的稳定性?

 1、查找元素前先做判断:ExpectedConditions里面的各种方法;

2、显式等待:多使用WebDriverWait,加上显式等待时间,等要操作的元素出现之后再执行下面的操作;

3、多用try catch捕获异常;

4、多线程的时候,减少测试用例耦合度,因为多线程的执行顺序是不受控制的;

5、尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。

5、什么PO模式?

 PO模式是page object model的缩写,顾名思义, 是一种设计模式,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法,实现脚本的page和真实的网站页面Map起来,一一对应起来。这样能测试框架更容易维护。 比如一个登陆页面,使用PO模式后,会创建一个class,该class会定义用户名输入框,密码输入框,登陆按钮的webElenent;用例层从页面层调用操作方法,写成用例,这种模式可以做到定位元素与脚本分离。所以这样的设计理念就是PO模式。

6、如何设计高质量自动化脚本

 1、 使用四层结构实现业务逻辑、脚本、数据分离。

2、 使用PO设计模式,将一个页面用到的元素和操作步骤封装在一个页面类中。如果一个元素定位发生了改变,我们只用修改这个页面的元素属性。

3、对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中是一个独立场景,例如:登录到退出,而且不要想着把所有的步骤都封装在一个方法中。

4、 测试用例设计中,减少测试用例之间的耦合度。

7、什么是断言?

断言的英文是assertion,断言检查的英文是assertion checking。

-断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。

8、自动化测试用例从哪里来?

手工用例中抽取,可以参考自动化用例的执行策略

9、怎样选择下拉菜单的元素

下拉菜单分两种,一种是直接使用select标签的,这种情况可以直接使用selenium API WebElement selector = driver.findElement(By.id("Selector"));

Select select = new Select(selector);

选择select的option有以下三种方法selectByIndex(int index) 通过index<br>selectByVisibleText(String text) 通过匹配到的可见字符<br>selectByValue(String value) 通过匹配到标签里的value

10、报NoSuchElementException的原因可能是什么?

(1)定位iframe中的元素,需switch_to_iframe

  (2)页面还没有加载出来就对页面的元素进行操作,可设置固定休眠时间、implicity_wait()是webDriver提供的超时等待,隐的等待一个元素被发现或者一个命令完成、WebDriverWait()

  (3)动态属性无法定位,可根据相对路径或者部分元素属性定位。

(4)二次定位(5)有两个属性相同的元素,但是其中一个不可见,找到符合这个属性且style属性中display=none的元素

(6)xpath描述错误

11、Selenium WebDriver –建议使用Webdriver捕获屏幕快照的方法是什么?

     import win32com.client   

   shell=win32com.client.Dispatch("WScrip.Shell")

12、如何处理alert弹窗?

我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗

我们知道,webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。相关操作代码如下:

// 切换到Alert

Alert alert = driver.switchTo().alert();

// 点击弹窗上确定按钮

alert.accept();

// 点击弹窗的取消按钮

alert.dismiss()

// 获取弹窗上线上的文本文字内容

alert.getText();

// 有些弹窗还支持文本输入,这个可以把要输入字符通过sendkeys方法输入

alert.sendkeys();

13、XPath中使用单斜杠和双斜杠有什么区别?

如果XPath是从文档节点开始,它将允许创建“绝对”路径表达式。

例如 “/ html / body / p”匹配所有的段落元素。如果XPath在文档中的任意位置开始进行选择匹配,那么它将允许创建“相对”路径表达式。例如 “// p”匹配所有的段落元素。

14、当有很多定位器时,如ID、名称、XPath、CSS定位器,我应该使用哪一个?

  如果有唯一的名称或标识符可用,那么应该使用它们来代替XPath和CSS定位器。如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。

15、举例一下你遇到过那些异常,在selenium自动化测试过程中

1. ElementNotSelectableException :元素不能选择异常

2. ElementNotVisibleException :元素不可见异常

3. NoSuchAttributeException :没有这样属性异常

4. NoSuchElementException:没有该元素异常

5. NoSuchFrameException :没有该frame异常

6. TimeoutException : 超时异常

7. Element not visible at this point  :在当前点元素不可见

16、findElement 和 FindElements有什么区别?

首先,两个都是查找元素,都支持八大元素定位方法。findElement()得到的只有一个元素,如果根据提供的元素定位方式找不到,会报noSuchElement异常
findElements()返回的是一组元素,所以我们需要根据能够找到一组元素的表达式去定位,返回一组元素我们可以放在集合里,这样我们就可以使用集合里面的迭代方法去遍历元素,拿到元素去做其他操作。

17、如何获取页面标题,悬浮文本和错误文本,并验证?

标题,我们可以通过driver.getTitle()方法来得到一个字符串,然后使用字符串的containts方法或者equals方法去进行断言。
悬浮文本(tooltip),一般是利用Actions类,然后鼠标悬停方法,然后通过getText()方法来得到这个tooltip字符串。
错误信息,直接把这个错误字段先进行定位,然后通过getText()方法拿到错误文本,主要的断言有包含,相等,不相等,不包含,以什么开头等。

18、在硒中处理多个弹出窗口的机制是什么?

可以使用命令getWindowHandles()来处理多个弹出窗口。
然后将所有窗口名称存储到Set变量中并将其转换为数组。
接下来,通过使用数组索引,导航到特定的窗口。driver.switchTo.window(ArrayIndex);

19、 隐式等待与显式等待有什么不同?
隐式等待是设置的全局等待,
分为1、页面加载超时等待 ;2、页面元素加载超时;3、异步脚本超时。
如果是页面元素超时,设置等待时间,是对页面中的所有元素设置加载时间。
隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你可以设置它来等待任何条件。
通常情况下,可以使用一些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。

20、关闭浏览器中quit和close的区别
两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。

21、 你写的测试脚本能在不同浏览器上运行吗,支持跨浏览器平台吗? 
主要实现这个跨浏览器的思想就是,把浏览器类型写到配置文件,代码里写if语句去判断配置文件的浏览器的类型,来决定用什么浏览器去执行测试用例

22、 一个元素明明定位到了,点击无效(也没报错),如果解决?
使用js点击,selenium有时候点击元素是会失效,js = 'document.getElementById("baidu").click()'<br>driver.execute_script(js)

23、 你觉得自动化测试最大的缺陷是什么?
不稳定,可靠性,不易维护,成本与收益

24、点击登录按钮的替代方法是什么?
使用submit()方法,但只有在属性type = submit时才能使用它。

25、你如何获得当前页面的URL?
driver.driver.current_url

26、 如何从文本框中获取打字文本?
通过将arg作为值传递来使用getAttribute(“value”)方法。

27、selenium中如何保证操作元素的成功率?
添加元素智能等待时间 driver.implicitly_wait(30)
- try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种Selenium保证元素成功率是通过元素的定位,
当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的。
需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,这样就能大大地提高元素定位的准确性。
当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。
只要我们元素定位准确,就能保证我的每一个操作符合我的预期

28、如何提高selenium脚本的执行速度?
如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。
所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。
我们可以从以下几个方面来提高速度:一,减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
二,中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。
四,配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。

29、什么是持续集成?
持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。
集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是不断的去做软件的集成工作。
持续集成,最简单的形式是包括一个监控版本控制(SVN等等)变化的工具。当变化被发觉时,这个工具可以自动的编译并测试你的应用

30、 Selenium是否支持桌面应用软件的自动化测试。
Selenium不支持桌面软件的自动化测试,Selenium是根据网页元素的属性才定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的。

31、 BDD是什么?你了解多少?TDD是什么?

BDD:行为驱动开发(Behavior Driven Development)
TDD:测试驱动开发(Test-Driven Development)

32、selenium是否可以直接读取Excel表中测试用例,来执行相关测试
可以的,需要借助第三方库

33、Selenium有哪些组件?
最早的有Selenium IDE,IDE只支持安装在fiefox上一个插件,支持录制自动化脚本。还有remote RC,和Grid 和webdriver。我们一般最重要的就是使用webdriver。

 

posted @ 2022-03-12 20:38  大熊童鞋  阅读(174)  评论(0编辑  收藏  举报