1.怎么 判断元素是否存在?

判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException

这样就可以使用try catch,如果catch到NoSuchElementException 就返回false

2.如何判断元素是否出现?

判断元素是否出现,存在两种情况,一种是该元素压根就没有,自然不会出现;另外一种是有这样的元素,但是是hidden状态

可以通过先判断是否存在,如果不存在返回false;如果存在再去判断是否displayed

3. 怎样选择下拉菜单的元素

下拉菜单分两种,一种是直接使用select标签的,这种情况可以直接使用selenium API

参考:http://www.cnblogs.com/tobecrazy/p/4570494.html

WebElement selector = driver.findElement(By.id("Selector"));
Select select = new Select(selector);
选择select的option有以下三种方法 selectByIndex(int index) 通过index
selectByVisibleText(String text) 通过匹配到的可见字符
selectByValue(String value) 通过匹配到标签里的value

第二种下拉菜单不是通过select实现的,可以通过JS进行操作

类似这样的:http://css3menu.com/ (关于怎么使用DevTools 请自行百度,不解释)

那么这样的菜单该怎么去选取?

可以收工演示一下,第一步鼠标移动到how to use,此时菜单出现;第二步,点击Technical Question

要实现第一步,使用selenium 的Action clickAndHold,接着就可findByElement进行操作

    WebElement menu = driver.findElement(By.xpath("//span[.='How to Use']"));

        Actions action = new Actions(driver);
action.clickAndHold(menu).build().perform();
WebElement technicalQuestion = driver.findElement(By.xpath(
"//ul[@id='css3menu_top']/li[position()=3]/div[@class='submenu']/div[@class='column']//a[contains(text(),'Technical')]"));
technicalQuestion.click();

4. selenium 有几种定位方式,你最常用哪种, 为什么?

selenium有八种定位方式,和name有关的3个ByName,ByClassName,ByTagName

和link有关的2个ByLinkText,ByPartialLinkText

和id有关的1个ById

剩下两个全能的ByXpath和ByCssSelector

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

事实上定位最快的应当属于ById,因为id是唯一的,然而大多数开发并没有设置id

5.去哪网面试题Java实现

一、 UI自动化测试
1、 Qunar机票搜索场景
1) 访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发、到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索列表页。
2) 在列表页停留1分钟,至到页面上出现“搜索结束”。
3) 如果出现航班列表,对于出现“每段航班均需缴纳税费”的行随机点选“订票”按钮,在展开的列表中会出现“第一程”、 “第二程”;对于没有出现“每段航班均需缴纳税费”的行随机点选“订票”按钮,在展开的列表底部中会出现“报价范围”
4) 如果不出现航班列表,则页面会出现“该航线当前无可售航班”

参考我的blog, http://www.cnblogs.com/tobecrazy/p/4752684.html

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

触发动态事件事件,进而findElemnt

如果是动态菜单,需要一级一级find

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

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

比如通过xpath的轴, parent/following-sibling/precent-sibling等

另外也可以尝试findbyelements遍历

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

  • 优化测试用例,尽可不使用 sleep,减少使用ImplicitlyWait
    ,而使用selenium的wait/FluentWait,这样可以优化等待时间
  • 使用selenium grid,通过testng实现并发执行
  • 针对一些不稳定的动态控件通过JS实现操作
  • 重载testng的listener实现retry机制,提高测试用例成功率
  • 减少使用IE的driver,IE执行效率太低!!!

9. webdriver 的原理是什么?

参考:http://www.cnblogs.com/tobecrazy/p/5034408.html

10. selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

参考:http://www.cnblogs.com/tobecrazy/p/4817946.html

  • 通过封装find方法实现waitforEmelentPresent,这样在对元素进行操作之前保证元素被找到,进而提高成功率
  • 在对元素操作之前,比如click,如果该元素未display(非hidden),就需要先滚动到该元素,然后进行click操作

  为啥使用滚动? 因为如果页面没有完全显示,element如果是在下拉之后才能显示出来,只能先滚动到该元素才能进行click,否则是不能click操作

1
2
3
JavascriptExecutor js=(JavascriptExecutor)driver;
        // roll down and keep the element to the center of browser
        js.executeScript("arguments[0].scrollIntoViewIfNeeded(true);", download);

11. 什么PO模式,什么是page factory?

网上有很多答案,都不全面

PO模式是page object model的缩写,顾名思义, 是一种设计模式,实现脚本的page和真实的网站页面Map起来,一一对应起来。这样能测试框架更容易维护。 比如一个登陆页面,使用PO模式后,会创建一个LoginPage的class,该class会定义用户名输入框,密码输入框,登陆按钮的webElenent

针对相应的Element实现相应的方法,输入框是用来输入的,就需要创建输入用户名和输入密码的方法,这样就和真实的页面一致,所以这样的设计理念就是PO模式。 而PageFactory隶属PO模式,是用来初始化每个PO模式实现的Page Class,初始化对象库。

未完待续,如果你遇到selenium面试题回答不了,请留言!

参考资料:

selenium 官方API : http://seleniumhq.github.io/selenium/docs/api/java/index.html

乙醇的去哪网面试题:http://www.cnblogs.com/nbkhic/p/3657035.html

selenium 常见面试题以及答案(Java版)的更多相关文章

  1. selenium 常见面试题以及答案

    1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...

  2. java常见面试题及答案

    java常见面试题及答案 来源 https://blog.csdn.net/hsk256/article/details/49052293 来源 https://blog.csdn.net/hsk25 ...

  3. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  4. java常见面试题及答案 11-20(JVM篇)

    11.JVM内存分哪几个区,每个区的作用是什么? Java虚拟机主要分为以下一个区: 方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区 ...

  5. java常见面试题及答案 11-20(JVM)

    11.JVM内存分哪几个区,每个区的作用是什么? Java虚拟机主要分为以下一个区: 方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区 ...

  6. ASP.NET常见面试题及答案(130题)

    1.C#中 property 与 attribute(抽像类)的区别,他们各有什么用处,这种机制的好处在哪里?答:property和attribute汉语都称之为属性.不过property是指类向外提 ...

  7. android 常见面试题以及答案

    http://blog.csdn.net/bobo1808/article/details/6783344 1.    请描述下Activity的生命周期.2.    如果后台的Activity由于某 ...

  8. 微软推荐的130道ASP.NET常见面试题及答案

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  9. linux常见面试题及答案

    1. 在Linux系统中,以文件方式访问设备. 2. Linux内核引导时,从文件/etc/fstab中读取要加载的文件系统. 3. Linux文件系统中每个文件用i字节来标识. 4. 全部磁盘块由四 ...

随机推荐

  1. C/C++头文件区别

    在从C迁移到C++时,引用的头文件经常忘记是C的还是C++特有的 1. *.h   limits.h ctype.h 2. c* climits cctype [结尾不含.h] 3. 其余的都属于C+ ...

  2. 网页中如何启用QQ交谈

    很多网友都会发现好多的网页中会有诸如,网页中如何启用QQ交谈? 1. 登录QQ, 打开网址:http://shang.qq.com/v3/widget.html 启用QQ通讯组件. 2. 选择组件样式 ...

  3. (转)gulp使用

    前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nod ...

  4. ActiveMQ_Mqtt的TCP丢包

    现象 Mqtt Consumer应该收到的消息少于预期,登录ActiveMQ的管理页面里的Topics,查看Messages Enqueued发现同样少于理应接收的数量. 定位问题 怀疑是TCP丢包, ...

  5. Chrome 开发工具之Sources

    Sources面板主要用于查看web站点的资源列表及javascript代码的debug 熟悉面板 了解完面板之后,下面来试试这些功能都是如何使用的. 文件列表 展示当前页面内所引用资源的列表,和平常 ...

  6. 5805 NanoApe Loves Sequence(想法题)

    传送门 NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K ( ...

  7. 【JavaScript】ArtTemplate个人的使用体验。

    据说ArtTemplate是腾讯的,感觉这东西真不错,使用方便,用起来很简单,哈哈.腾讯也不完全只是坑爹啊. ArtTemplate 使用是,正常引入js,这个自然不用说.这东西啥时候使用呢?我觉得这 ...

  8. FZU 2105Digits Count(线段树 + 成段更新)

    Description Given N integers A={A[0],A[1],...,A[N-1]}. Here we have some operations: Operation 1: AN ...

  9. webstorm卡顿问题

    近期随着项目开展,文件逐渐增大,webstrom频繁出现卡顿,而且时有崩溃现象,提示没有足够的内存来执行请求的操作,需要增加Xms设置. 解决办法: 1.找到WebStorm.exe.vmoption ...

  10. Web安全之SQL注入攻击技巧与防范

    http://www.plhwin.com/2014/06/13/web-security-sql/