selenium面试必备问题

请列举web自动化中常见的元素定位方式

(1)id

根据id来获取元素,返回单个元素,id值一般是唯一的

(2)name

根据元素的name属性定位

(3)tagName

根据元素的标签名定位

(4)className

根据元素的样式class值定位

(5)linkText

根据超链接的文本值定位

(6)partialLinkText

根据超链接的部分文本值定位

(7)cssSelector

css选择器定位

(8)xpath

通过元素的路径来定位

 

如何定位属性值动态变化的元素?

元素动态变化有特征,如id属性 lemonxxxxx, xxxx是随机变化的,那么可以根据xpath的contains函数来获取 --> //*[contains(@id,’lemon’)]

如果无特征,根据相对关系定位根据其附近的父节点、子节点、兄弟节点定位

 

xpath中绝对路径和相对路径有什么区别?

绝对定位:

元素的完整路径如:/html/body/div/div/a

相对定位:

dom结构中的任意位置匹配 如://a

 

请说出显示等待和隐式等待的区别

隐式等待:通过driver对象给所有的元素设置的全局等待,在设置的时间范围内一直不断去找元素,如果超时则会抛出异常。

显示等待:针对元素设置的等待时间,并且只对该元素有效,用来等待某个条件满足。默认会每间隔0.5秒去找元素,检查元素是否满足等待的条件,超时则会抛出异常。

 

在selenium运行过程中如何去动态改变元素的属性?

通过javaScipt脚本去操作dom对象

 
为了提高UI自动化脚本的稳定性,你有做了哪些工作?

(1)尽量用相对路径的xpath表达式

2)查找元素优先用显示等待

3)用例与用例之间尽量避免产生依赖,用例可以独立执行

4)用例执行结束后对测试场景进行还原,避免影响其他用例的执行

5)脚本执行失败后加入重试机制,提升用例的稳定性

6)尽量保证单独的测试环境,避免其他的测试同步进行

 

为了提高UI自动化脚本的可维护性,你有做了哪些工作

(1)Page Object分层模式,业务和页面元素分离

(2)测试数据和用例分离,单独维护测试数据

(3)页面和用例共性提取

(4)可追溯日志

 

什么是PO(Page Object)模式?

页面对象模式,对页面进行抽象或者说建模的过程,需要把页面当作一个对象。把页面的一个个的web元素设计为页面对象的属性,把页面上的操作(如点击、输入等)设计为页面对象的行为。这样做的好处是业务和实现分开,使自动化测试脚本具备更高的可维护性。

 

请描述下你所设计的Web自动化框架的特点?

(1)通过pytest单元测试框架组织/管理测试用例

(2)引入Page Object思想对用例进行分层设计,业务和页面元素分离。   设计思想:测试用例层+页面对象层+元素定位层+测试数据层

(3)页面元素共性操作提取basepage封装,实现实时执行日志输出、异常实时捕获、用例失败截图。对外只提供元素操作,屏蔽掉元素等待和元素查找,简化页面操作逻辑代码。

(4)测试用例中,数据驱动使用

(5)logging日志引入,问题定位/追溯

(6)Allure报表,用例失败后截图

(7)用例失败重试,提高用例稳定性

(8)集成到Jenkins中,每天/每小时构建多次

 

请描述下selenium工作原理?

webdriver调用chrome浏览器,创建driver对象后,去启动浏览器的驱动。然后在本地(python代码)发送一个http协议的请求去建立连接,然后给python客户端返回一个sessionid,客户端(python)每次通过http协议的请求携带着sessionid发送到webdriver,webdrive会直接操作浏览器。

也可以通俗易懂的大白话:简单的是说,就是我们写的python代码看做是客户端,通过http协议向浏览器驱动发送操作操作请求,驱动对浏览器进行操作

 

 

 selenium怎么维护稳定性?

1.加入pytest 用例失败重运行机制

2.优化元素定位表达式

3.添加等待

 

web自动化跑多久呢?     

首先想到自动化用例有多少条,大概一条的跑多久(不是特别复杂10s-15s),如果一条用例跑10秒,一分钟就跑6条,一个小时跑360条case。本人在工作中有200多不到300条case,大概做一次web自动化的一个小时

 

selenium自动化页面元素找不到存在异常的原因?

① 元素定位错误

② 页面加载时间过慢,需要查找的元素程序已经完成,单页面还未加载,此时可以加载页面等待时间

③ 有可能元素包含在iframe或者frame里面,需要切换。

 

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

属性动态变化是指该element没有固定的属性值,只能通过相对位置定位。

第一种方法:用findelements遍历

第二种方法:通过xpath的轴 parent / following-sibling / precent-sibling

 

如何去定位页面上动态加载的元素?

触发动态事件,继而findelement;如果是动态菜单,需要一级一级的find。

 

selenium调用js(execute_script),有哪些场景?

① 对input执行输入

② 对富文本框的操作

③ 滚动到指定位置操作

 

selenium如何处理web弹窗?js弹窗?

需要使用driver.switch_to.alert()

 

selenium可以处理window弹窗吗?

selenium本身是不可以处理windows弹窗的,但是可以借助AutoIT小工具来完成对windows弹窗的操作。比如 上传下载附件等

 

如何在定位元素后高亮元素(以调试为目的)?

使用javascript将元素的border或者背景颜色改成黄色或其他颜色即可

 

selenium是否支持桌面应用软件的自动化测试?

不支持。selenium是根据网页元素的属性来确定范围元素的

 

selenium是否有读取excel文件的库?

没有,需要借助第三方工具。例如Apache PIO插件

 

selenium是否可以向页面发送鼠标滚轮操作?

不能。

 

如何在webdriver中调用应用程序?

driver.get('url') 或者 driver.navigate().to('url')

 

selenium中常见的异常?

NoSuchElementException 找不到页面元素异常

ElementNoInteractac tableException

 

selenium为什么不推荐使用xpath定位?

selenium使用xpath定位时采用遍历页面的方式,性能指标较差。另外xpath定位有通过绝对路径定位的,有时会不准确;

而用css选择器定位比较简洁,运行速度更快,通常用于性能要求严格的场景。

 

如何判断一个页面上元素是否存在?

法1:用try...except 在代码块加上

法2:用elements定义组元素方法 然后根其元素个数len()<1 存在返回True, 不存在则返回False

法3:结合WebDriverWait和excepted_conditions条件判断(强烈推荐)

显示等待,每间隔1秒判断一次,30秒超时,存在返回True,不存在则返回False

 

如何定位动态元素?

动态元素有两种情况:

一个是属性动态,定位时,若id是动态的,就不要用id定位,用其他定位元素方法

另一个还是这个元素一会在页面上方,一会在下方,飘忽不定,定位方法也是一样,根据元素属性定位(元素的tag name属性是不会变的,动的只是class属性和style属性)

 

如何通过子元素定位父元素?

通过父元素定位子元素,可以通过二次定位来找到。

第一种:通过子元素定位父元素,selenium提供了parent方法,但是只能定位到父元素,却不能获取元素属性,也不能操作。

第二种:通过xpath的语法直接定位。 如.//*[@name="hello"]/.. 两个点代表父级元素。

 

如何截取一个元素的图片,不要截取全部图片?

首选截取当前页面并自定义保存

然后根据要截取元素图片的属性来获取该元素的坐标和大小 ele.location ele.size

然后分别left = ele.location['x']

top = ele.location['y']

right = ele.location['x'] + ele.size['width']

bottom = ele.location['y'] + ele.size['height']

获取该元素的图片的坐标大小

最后,再次打开刚开始保存的,通过image类中的crop方法(相当于拷贝该元素的一个矩形区域),然后做保存操作就可以了。

 

一个元素明明定位了,点击无效(也没报错),如何解决?

使用js点击,selenium有时候点击元素时会失效

# js 点击

js = 'document.getElementById('baidu').click()'

driver.execute_script(js)

 

如何提高脚本的稳定性?

首先只要页面一直没变过,说明定位方法是没问题的。

优化方向:① 自己写相对路径,多用id为节点查找,少用右键复制xpath,那种不稳定。

② 第二个影响因素就是等待了,sleep等待尽量少用(影响执行时间)

③ 定位元素方法重新封装,结合WebDriverWait和excepted_conditions判断元素方法,自己封装一套定位元素方法

 

提高selenium脚本的执行速度方式?

减少不必要的操作。

页面加载过多并且不影响测试,可设置超时时间中断页面加载。

设置等待时间时,可以sleep()固定的时间,检测到元素出现后中断等待也可以提高速度。

配置testNG实现多线程,在编写测试用例时,一定要实现松耦合,在服务器允许的情况下尽量设置多线程运行,提高执行速度。

 

selenium自动化时,在平时遇到过哪些问题?如何解决的?

比如动态id 、有iframe的情况、没加等待等因素

 

selenium中隐藏元素定位,你该如何做?

隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click 、clear 、send_keys等这些方法)。我们可以用js来操作隐藏元素。js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作。

 

上传图片的几种方式?

send_keys和AutoIT工具实现

 

截图应当怎么操作?

driver.get_screenshot_as_file('C:\test.jpg')

 

posted @ 2021-03-01 10:50  北京测试菜鸟  阅读(340)  评论(0编辑  收藏  举报