【上海校区】selenium 常见面试题以及答案(Java版)

Java 未结 3 77
网络营销策划书
网络营销策划书 2021-04-30 09:20
悬赏:71
相关标签:
3条回答
  • 2021-04-30 09:53
    或者添加学姐微信
    DKA-2018
    67 讨论(0)
  • 2021-04-30 09:41
    有任何问题欢迎在评论区留言
    51 讨论(0)
  • 2021-04-30 09:37
    1.怎么 判断元素是否存在?
    判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException
    这样就可以使用try catch,如果catch到NoSuchElementException 就返回false

    2.如何判断元素是否出现?
    判断元素是否出现,存在两种情况,一种是该元素压根就没有,自然不会出现;另外一种是有这样的元素,但是是hidden状态
    可以通过先判断是否存在,如果不存在返回false;如果存在再去判断是否displayed
    3. 怎样选择下拉菜单的元素
    下拉菜单分两种,一种是直接使用select标签的,这种情况可以直接使用selenium API
    参考:http://www.cnblogs.com/tobecrazy/p/4570494.html
    [url=][/url]
    WebElement selector = driver.findElement(By.id("Selector"));Select select = new Select(selector);选择select的option有以下三种方法selectByIndex(int index) 通过indexselectByVisibleText(String text) 通过匹配到的可见字符selectByValue(String value) 通过匹配到标签里的value[url=][/url]

    第二种下拉菜单不是通过select实现的,可以通过JS进行操作
    类似这样的:http://css3menu.com/ (关于怎么使用DevTools 请自行百度,不解释)
    那么这样的菜单该怎么去选取?
    可以收工演示一下,第一步鼠标移动到how to use,此时菜单出现;第二步,点击Technical Question
    要实现第一步,使用selenium 的Action clickAndHold,接着就可findByElement进行操作
    [url=][/url]
        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();[url=][/url]


    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操作
    [size=1em]
    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,初始化对象库。

    24 讨论(0)
提交回复