**1、**selenium中如何判断元素是否存在p>
- isElementPresent
2,id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么li> - css 、xpath 几乎所有的元素都可以定位到
3,、如何去定位页面上动态加载的元素li> - 触发动态加载元素的事件,直至动态元素出现,进行定位
4、如何去定位属性动态变化的元素p>
- xpath或者css通过同级、父级、子级进行定位
5、点击链接以后,selenium是否会自动等待该页面加载完毕li> - 会的
6 get和post 的区别r> 两种请求方式的区别:
1、GET请求,请求的数据会附加在URL之后,以URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
2、传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
3、安全性
POST的安全性比GET的高
7公司内一直在使用的测试系统(B/S架构)突然不能访问了,需要你进行排查并恢复,说出你的检查方法
答:一、 站输入域名直接无法访问, 站之前还正常,突然就无法访问
- 测试FTP是否正常可以登录,不能登录的直接问空间商那是空间商的问题直接联系他们。
- 空间赠送的三级域名是否能够访问 站打开 站(空间都赠送三级域名),如果也不能访问应该是空间问题。
- 在电脑的开始菜单运行中输入cmd,在弹出的黑框中输入:ping 你的域名;然后回车,如果看不到IP或IP地址与你的主机地址不符,则说明域名解析有误,是域名的问题得重新解析域名。
二、访问 404错误(无法找到该页)。说明是 站内容都正常是程序出现问题,看看程序是否完整。
三、访问 站出现MySQL Server Error 这个是数据库链接错误,查看数据库连接文件和数据库是不是错误。
四、访问 站出现500错误。 - 请登录FTP查看是否多了异常文件或丢失文件,说明 站被侵入了,马上联系 站制作进行进行排查故障。
- 如果空间且FTP程序目录没有缺失文件或刚刚安装就出现500错误,请确认空间已开启scandir()函数,查看是不是禁止了这个函数
8selenium 有几种定位方式,你最常用哪种, 为什么r> selenium有八种定位方式,和name有关的3个ByName,ByClassName,ByTagName
我最常用的事ByXpath(或CssSelector)因为很多情况下,html标签的属性不够规范,无法通过单一的属性定位,这个时候就只能使用xpath可以去重实现定位唯一element
事实上定位最快的应当属于ById,因为id是唯一的,然而大多数开发并没有设置id
9等待
显示等待——WebDriverWait()
:等到某个条件成立时继续执行。每隔一段时间检测,超出最大时间则抛出异常
is_disappeared = WebDriverWait(driver, 5).until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())
2. 隐式等待——implicitly_wait()
隐式等待中的时间并非一个固定的等待时间,它并不影响脚本的执行速度。比如进行某元素的定位时,如果元素可以定位就继续执行,如果目前定位不到就以轮询的方式持续判断该元素是否被定位到,如果超过规定的时间还没定位到就抛出异常。
driver.implicitly_wait(20)
3. 强制等待——sleep()
from time import sleep
sleep(5)
2.Selenium是否支持桌面应用软件的自动化测试。
Selenium不支持桌面软件的自动化测试,Selenium是根据 页元素的属性才定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的。
3.Selenium是否支持用例的执行的引擎。
引擎好比就是一个发动机。Selenium是没有关于测试用例和测试套件管理和执行的模块。我们需要借助第三方单元测试框架来实现用例管理和用例的执行。例如Java中有Junit或者testNG,Python中有unittest单元测试框架。
4.Seleinum是否有读取excel文件的库
没有,这里需要用到第三方工具。例如Apache POI插件。
5.Selenium有哪些组件r> 最早的有Selenium IDE,IDE只支持安装在fiefox上一个插件,支持录制自动化脚本。还有
remote RC,和Grid 和webdriver。我们一般最重要的就是使用webdriver。
6.Selenium有什么限制或者缺陷
除了基于web的软件和mobile的程序,selenium不支持桌面软件自动化测试。软件测试 告,和用例管理只能
依赖第三方插件,例如Junit/TestNG和unittest。由于它是免费的软件,所以没有供应商去提供支持和服务,有问题,只能求助selenium 区。还有一个就是,selenium入门门槛可能有点高,需要具备一定编程语言基础的才能玩转。
7.在selenium中,有哪些不同定位元素方法
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector
8.什么是imlicitlyWait
imlicitlyWait是隐式等待,一般在查找元素的时候使用。例如,我设置一个查找元素最大时间为10秒,使用了
imlicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环去找元素,知道超过10秒, 超时错误。
9.什么是expliciteWait
这个是显式等待,就是不管如何都是要等10秒,如果你设置了10秒超时,这个是selenium2的功能
在selenium3中,我暂时没有找到这个接口。
10.什么是线程等待
有时候,我们需要强制设置线程等待,Thread.sleep(2000),driver这个实例,就是当前的线程。
11.什么是pollingEvery
这个是设置个一段时间就去做一件事,例如下面设置隔一秒就去查找元素一次。
WebDriverWait wait = new WebDriverWait(driver,30);
wait.pollingEvery(1, TimeUnit.SECONDS);
driver.findElement(By.xpath(“xxxx”));
12你能解释下Selenium这个框架吗p>
Selenium Grid:它是selenium框架的一部分,主要是专门用来把测试用例并行地在不同浏览器,不同操作系统,不同机器上运行。一般我们写脚本,调试都在单机上线性地一个测试用例接着一个测试用例执行下去。如果有人问题如何提高测试用例执行效率,告诉他Selenium Grid可以实现。
Selenium IDE: 这个算Selenium里面最简单的一个组建,只支持在火狐浏览器上安装这个扩展程序,支持录制web ui脚本,然后导出不同语言的脚本,例如java c#等。这个功能算鸡肋,因为很多时候导出脚本debug的时间还不如自己代码重新写来的快。
Selenium RC: RC是remote control的缩写,主要的功能就是让你不管使用什么语言(Selenium支持的这几种语言之一)来写测试脚本,只要是这个浏览器支持java script,那么写一遍测试脚本,都能在这些不同浏览器运行脚本。
Webdriver:这个是用来替代Selenium RC,就是一个 页自动化工具,支持在不同浏览器上运行测试脚本,运行速度比Selenium RC要快很多。据说(我也记得不清楚),webdriver最早是google内部开发的一个工具,用来捐给selenium了,变成开源了。
13.你写的测试脚本能在不同浏览器上运行吗,支持跨浏览器平台吗
这里出现了跨浏览器平台的概念,就是写一个测试用例,可以在主流的几个浏览器跑起来。
是的,我写的测试用例能在IE,火狐和谷歌这三种浏览器上运行。主要是在windows平台上运行脚本,所以mac的safari浏览器暂时没有写过。主要实现这个跨浏览器的思想就是,把浏览器类型写到配置文件,代码里写if语句去判断配置文件的浏览器的类型,来决定用什么浏览器去执行测试用例。
14.一天你写多少个自动化测试用例
这个要看具体情况,完全取决于手工测试用例的实现难易程度。通常,熟练的话,写一个5到8个步骤的测试用例,差不多要半小时。时间最多花在元素定位和 错debug上面,例如在POM思想的框架中,某一些元素定位和方法是复用的,可能会更快一些。所以,一天,大概能完成15-30个自动化测试用例。
15.什么是POM,为什么要使用它
POM是Page Object Model的简称,它是一种设计思想,而不是框架。大概的意思是,把一个一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,所以自然而然就用了类的思想来组织我们的页面。一般一个页面写一个类文件,这个类文件包含该页面的元素定位和业务操作方法。
为了我们测试用例写的简单,清晰,我们很多时候在页面对象会封装很多业务操作方法,测试脚本只需要调用相关方法就可以。
还有一个可能和这个问题相关的面试题,如果页面元素经常发生需求变化,你是如何做,答案就是采用POM思想。好处就是只要该一个页面,我就去修改这个页面对象的元素定位和相关方法,脚本不需要修改。
16.在你做自动化过程中,遇到了什么问题吗下
这个问题,不管是自动化还是任何工作,都会被问到。主要想知道你是如何解决问题的,从而推断你问题分析和解决的能力。
当然有遇到问题和挑战,主要有以下几点:
17.举例一下你遇到过那些异常,在selenium自动化测试过程中
通过这个问题,大概知道你写过多少脚本。写脚本过程最常见的异常就是,这个元素无法找到。常见的selenium有以下这些:
-
ElementNotSelectableException :元素不能选择异常
-
ElementNotVisibleException :元素不可见异常
-
NoSuchAttributeException :没有这样属性异常
-
NoSuchElementException:没有该元素异常
-
NoSuchFrameException :没有该frame异常
-
TimeoutException : 超时异常
-
Element not visible at this point :在当前点元素不可见
-
如何处理alert弹窗
我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗
我们知道,webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。相关操作代码如下:
// 切换到Alert
Alert alert = driver.switchTo().alert();
// 点击弹窗上确定按钮
alert.accept();
// 点击弹窗的取消按钮
alert.dismiss()
// 有些弹窗还支持文本输入,这个可以把要输入字符通过sendkeys方法输入
alert.sendkeys();
- 在selenium中如何处理多窗口li>
这个多窗口之间跳转处理,在实际selenium自动化测试经常遇到。就是,你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要查找元素在新tab打开的页面,所以这里需要用到swithTo方法。
需要获取当前浏览器多窗口句柄,然后根据判断跳转新句柄还是旧句柄,具体代码可以参考我博客文章:http://blog.csdn.net/u011541946/article/details/73611301
- 你查找元素遇到过在Frame里面吗如何处理Frame里面元素定位的li>
有时候我们知道元素定位表达式没有问题,但是还是提示no such element,那么我们就需要考虑这个元素是否在frame中。如果在,我们就需要从topwindow,通过swithcTo.Frame()方法来切换到目标frame中,可以通过frame的name和id和索引三种方法来定位frame。
- 怎么验证勾选框是enable/disabled/ checked/Unchecked/ displayed/ not displayedli>
通过以下方法来验证元素是enable 还是disable
boolean enabled = driver.findElement(By.xpath(“元素定位表达式”)).isEnabled();
通过以下方法来验证元素是select/check
boolean checked = driver.findElement(By.xpath(“元素定位表达式”)).isSelected();
通过以下方法来验证元素是dispalyed还是not display
boolean displayed = driver.findElement(By.xpath(“元素定位表达式”)).isDisplayed();
- 如何处理下拉菜单li>
通常我们也可以通过Click方法来点击下拉菜单里面的元素,还有一种方法,在Selenium中有一个类叫Select,支持这种下拉菜单交互的操作。
基本使用语法是这样的:
Select Se=new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);
- 在日历这种web 表单你是如何处理的li>
首先要分析当前 页试用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。
- 关闭浏览器中quit和close的区别
简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。
25. 什么是页面加载超时
Selenium中有一个 Page Load wait的方法,有时候,我们执行脚本的速度太快,但是 页程序还有一部分页面没有完全加载出来,就会遇到元素不可见或者元素找不到的异常。为了解决问题,让脚本流畅的运行,我们可以通过设置页面加载超时时间。具体代码是这个:driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);
这行作用就是,如果页面加载超过10秒还没有完成,就抛出页面加载超时的异常。
26.什么是JavaScript Executor,你什么时候会用到这个p>
JavaScript Executor是一个接口,给driver对象提供一个执行javaScript并访问和修改前端元素属性和值。
还是有比较多的场景,我们可能或者需要借助javaScript来实现:
1.元素通过现有定位表达式不能够实现点击
2.前端页面试用了ck-editor这个插件
3.处理时间日期插件(可能)
4.生成一个alert弹窗
5.拖拽滚动条
基本语法:
JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript(Script,Arguments);
27.在Selenium中如何实现截图,如何实现用例执行失败才截图
在Selenium中提供了一个TakeScreenShot这么一个接口,这个接口提供了一个getScreenshotAs()方法可以实现全屏截图。然后我们通过java中的FileUtils来实现把这个截图拷贝到保存截图的路径。
代码举例:
File src=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
// 拷贝到我们实际保存图片的路径
FileUtils.copyFile(src,new File(“C:/selenium/error.png”));
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
如果要实现执行用例发现失败就自动截图,那么我们需要把这个截图方法进行封装。然后在测试代码中的catch代码块去调用这个截图方法。这个我们在POM的框架中一般是把截图方法封装到BasePage这个文件中。
28.在Selenium中如何实现拖拽滚动条p>
在Selenium中通过元素定位会自动帮你拖拽到对应位置,所以是没有自带的scoll方法。但是这个是有限制,例如当前页面高度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会 元素不可见的异常。我们就需要利用javaScript来实现拖拽页面滚动条。
我们一般可以两个方法去拖拽,一个是根据拖拽的坐标(像素单位),另外一个是根据拖拽到一个参考元素附件。
代码举例(根据元素坐标拖拽):
JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript(“window.scrollBy(0,250)”, “”);
29.如何实现文件上传p>
我们在web页面实现文件上传过程中,可以直接把文件在磁盘完整路径,通过sendKeys方法实现上传。如果这种方法不能实现上传,我们就可能需要借助第三方工具,我用过一个第三方工具叫autoIT.
还有一个方法是利用robot类:
http://blog.csdn.net/u011541946/article/details/74332938
30.如何处理“不受信任的证书”的问题p>
例如,在登录12306 站的时候,如果你没有下载和安装过这个 站的根证书,那么你就会遇到打开12306 站提示证书不受信任的拦截页面。
下面举例火狐和谷歌上处理这个问题的基本代码
火狐:
// 创建firefoxprofile
FirefoxProfile profile=new FirefoxProfile();
// 点击继续浏览不安全的 站
profile.setAcceptUntrustedCertificates(true);
// 使用带条件的profile去创建一个driver对象
WebDriver driver=new FirefoxDriver(profile);
Chrome:
// 创建类DesiredCapabilities的对象
DesiredCapabilities cap=DesiredCapabilities.chrome();
// 设置ACCEPT_SSL_CERTS 变量值为true
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
// 新建一个带capability的chromedriver对象
WebDriver driver=new ChromeDriver(cap);
31.findElement 和 FindElements有什么区别p>
首先,两个都是查找元素,都支持八大元素定位方法。findElement()得到的只有一个元素,如果根据提供的元素定位方式找不到,会 noSuchElement异常。
findElements()返回的是一组元素,所以我们需要根据能够找到一组元素的表达式去定位,返回一组元素我们可以放在集合里,这样我们就可以使用集合里面的迭代方法去遍历元素,拿到元素去做其他操作。
32.在执行脚本过程,如何实现当前元素高亮显示p>
这个其实就是利用javaScript去修改当前元素的背景颜色来到达高亮显示的效果,
33.如何获取页面标题,悬浮文本和错误文本,并验证p>
标题,我们可以通过driver.getTitle()方法来得到一个字符串,然后使用字符串的containts方法或者equals方法去进行断言。
悬浮文本(tooltip),一般是利用Actions类,然后鼠标悬停方法,然后通过getText()方法来得到这个tooltip字符串。
错误信息,直接把这个错误字段先进行定位,然后通过getText()方法拿到错误文本,主要的断言有包含,相等,不相等,不包含,以什么开头等。
34.在selenium自动化测试中,你一般完成什么类型的测试p>
35.你是如何管理你的测试用例并执行p>
36.关于自动化测试 告生成p>
我个人一般用TestNG原生的测试 告,也有第三方叫reportNG的插件,不过我没有实际使用过。
Python下 告生成一般使用HTMLTestRunner.py
- 了解或者使用过框架不li>
类似的问题还有,你知道那些自动化测试框。
我们知道POM自动化测试框,还有关键字驱动框架。当然还有数据驱动框架,最近几年出的行为驱动框架。
- 这个框架是你自己写的吗li>
我自己设计过POM的框架和关键字驱动框架。
39.能不能介绍下你的框架
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!