Selenium⾯试题
selenium怎么使用NO.1 Selenium是什么
是⼀个开源的web⾃动化测试的框架,⽀持多种编程语⾔,⽀持跨浏览器平台进⾏测试
NO.2 Selenium中有哪些验证点?
Selenium主要有三种验证点
检查页⾯标题
检查某些⽂字
检查某些元素(⽂本框,下拉菜单,表等)
NO.3 你如何从Selenium连接到数据库?
Selenium是⼀个Web UI⾃动化⼯具。它不提供任何API来建⽴数据库连接。这取决于你使⽤Selenium进⾏⾃动化的编程语⾔。
NO.4 如何提⾼selenium脚本的执⾏速度?
1.优化测试⽤例。设置等待时间的时候,少⽤sleep,尽量不⽤implicitly_wait,多⽤显式等待⽅法;
2.减少不必要的操作步骤。如经过三四步才能打开要测试的页⾯的话,可以直接通过⽹址来打开;
3.中断页⾯加载。如果加载的内容不影响我们测试,就设置超时时间,中断页⾯加载;
4.使⽤Selenium grid,通过testNG实现并发执⾏。 在编写测试⽤例的时候,实现松耦合,然后再服务器允许的情况下,尽量设置多
线程实现并发运⾏。
NO.5 如何验证多个页⾯上存在的⼀个对象?
可以使⽤下⾯的Selenium命令来检查:
assertTrue(selenium.isElementPresent(locator));
NO.6 selenium中如何判断元素是否存在?
没有提供原⽣的⽅法判断元素是否存在,⼀般我们可以通过定位元素+异常捕获的⽅式判断
NO.7 selenium中hidden或者是display = none的元素是否可以定位到?
不可以,想点击的话,可以⽤js去掉dispalay=none的属性
NO.8 selenium中如何保证操作元素的成功率?
保证操作元素的成功率,也就是说如何保证我点击的元素⼀定是可以点击的?
1.⾸先通过封装find⽅法,实现wait_for_element_ispresent(WebDriverWait)
2.在对页⾯进⾏click之前,先滚动到该元素(通过Js封装),避免在页⾯未加载完成前或是在下拉之后才能显⽰。
3.不同⽅式进⾏定位,与expected_conditions判断⽅法封装,循环判断页⾯元素出现后再操作;
4.开发⼈员规范开发习惯,如给页⾯元素加上唯⼀的name,id等。
NO.9 Selenium有⼏种定位⽅式?如何选择?
Selenium有⼋种定位⽅式:
与name有关的有三种:name、class_name、tag_name
与link相关的有两种:link_text、partitial_link_text
与id有关:id
全能选⼿:xpath、css_selector
如果存在id,我⼀定使⽤Id,因为简单⽅便,定位最快。
其次是Xpath,因为很多情况下html标签的属性不够规范,⽆法唯⼀定位。Xpath是通过相对位置定位
如果没有,那么CSS定位器应该被优先考虑,因为在⼤多数现代浏览器中,它们的评估速度⽐XPath更快。
NO.10 如何去定位页⾯上动态加载的元素?
⾸先触发动态事件,然后再定位。如果是动态菜单,则需要层级定位。——JS实现(对动态事件封装)
NO.11 如何去定位属性动态变化的元素?
先去该元素不变的属性,要是都变,那就不变的⽗元素,⽤层级定位(以不变应万变)
属性动态变化也就是指该元素没有固定的属性值,可以通过:
JS实现,
通过相对位置来定位,⽐如,paren/following-sibling/percent-sibling
NO.12 点击链接以后,selenium是否会⾃动等待该页⾯加载完毕?
不会的。所以有的时候,当selenium并未加载完⼀个页⾯时再请求页⾯资源,则会误报不存在此元素。所以⾸先我们应该考虑判断,selenium是否加载完此页⾯。其次再通过函数查该元素。
NO.13 如何在页⾯加载成功后验证元素的存在?
它可以通过下⾯的代码⾏来实现。
只需⼀点时间(以秒为单位)来检查元素,如下所⽰:
public void waitForElementPresent(String element,int timeout)throws Exception {
for(int second =0;; second++){
if(second >= timeout)
fail(“Timeout. Unable to find the Specified element” + element);
try{
if(selenium.isElementPresent(element))
break;
}catch(Exception e){
}
Thread.sleep(1000);
}}
NO.14 怎样去选择⼀个下拉框中的value=xx的option?
1.select类⾥⾯提供的⽅法:select_by_value(“xxx”)
2.xpath的语法也可以定位到
NO.15 如何在标题菜单的⼦菜单项上执⾏⿏标移动操作?
应该⾸先移动菜单标题,然后移⾄弹出菜单项并单击它。不要忘记在最后调⽤actions.perform() 。
NO.16 如何在定位元素后⾼亮元素(以调试为⽬的)?
重置元素属性,给定位的元素加背景、边框
NO.17 XPath中使⽤单斜杠和双斜杠有什么区别?
如果XPath是从⽂档节点开始,它将允许创建“绝对”路径表达式。
例如 “/ html / body / p”匹配所有的段落元素。
如果XPath在⽂档中的任意位置开始进⾏选择匹配,那么它将允许创建“相对”路径表达式。
例如 “// p”匹配所有的段落元素。
NO.18 什么是XPath?什么时候应该在Selenium中使⽤XPath?
XPath是⼀种在HTML / XML⽂档中定位的⽅法,可⽤于识别⽹页中的元素。
如果没有与页⾯上的元素相关联的名称/ ID,或者名称/ ID的⼀部分是常量,则必须使⽤XPath。
绝对路径⽤-/单斜杠
相对路径⽤-//双斜杠
ID,类,名称也可以⽤于XPath :
//input[@name=’q’]
//input[@id=’lst-ib’]
//input[@class=’ lst’]
如果id/ name /class的⼀部分是常量:
//input[contains(@id,’lst-ib’)
NO.19 什么是Selenium的CSS定位器策略?
CSS位置策略可以与Selenium⼀起使⽤来定位元素,它使⽤CSS定位⽅法
绝对路径⽤-(空格符号)
相对路径⽤->表⽰
ID,类,名称也可以⽤于XPath:
css=input[name=’q’]
css=input[id=’lst-ib’]or input#lst-ib
css=input[class=’lst’]or input.lst
如果id/ name /class只有⼀部分是常量:
css=input[id*=’lst-ib’)]
使⽤内部⽂本的元素位置策略:
css = a:contains(‘log out’)
NO.20 webdriver可以⽤来做接⼝测试吗?
不可以,webdriver是专门做web的UI⾃动化参数
NO.21 webdriver client的原理是什么?
在selenium启动以后,driver充当了服务器的⾓⾊,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执⾏相应的操作,并把执⾏结果返回给client.
NO.22 webdriver的协议是什么?
WebDrive协议本⾝是http协议,数据传输使⽤json
启动浏览器的时候⽤到的是http协议
NO.23 如何处理WebDriver中的AJAX控件?
AJAX代表异步JavaScript和XML。它不依赖于创建有效的XML所需的打开和关闭标签的额外开销。⼤部分时间WebDriver⾃动处理Ajax 控件和调⽤。如果不能处理的话,可以按照下⾯的⽅式来处理。
Waiting for Ajax Control
WebElement AjaxElement =(new WebDriverWait(driver,
10)).until(ExpectedConditions.presenceOfElementLocated(By.("")));
NO.24 在处理多个弹出窗⼝的机制是什么?
可以使⽤命令getWindowHandles()来处理多个弹出窗⼝。
然后将所有窗⼝名称存储到Set变量中并将其转换为数组。
接下来,通过使⽤数组索引,导航到特定的窗⼝。
driver.switchTo().window(ArrayIndex);
NO.25 你如何处理使⽤Selenium的Ajax控件?
假如⼀个⽂本框是⼀个Ajax控件,当我们输⼊⼀些⽂本时,它会显⽰⾃动建议的值。
处理这样的控件,需要在⽂本框中输⼊值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。
NO.26 隐式等待与显式等待有什么不同?
隐式等待是设置的全局等待,分为
1、页⾯加载超时等待 ;
2、页⾯元素加载超时;
3、异步脚本超时。
如果是页⾯元素超时,设置等待时间,是对页⾯中的所有元素设置加载时间。
隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页⾯,直到到相关元素或者时间结束。
显式等待只是⽤于特定搜索的⼀个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常情况下,可以使⽤⼀些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。
NO.27 如何解决IE中的SSL认证问题?
打开浏览器后添加下⾯的命令
driver.navigate().to(“ElementById(‘overridelink’).click()”);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。