zoukankan      html  css  js  c++  java
  • 【selenium】UI自动化面试题精简附答案

    • 【selenium】UI自动化面试题

    题记:

      最近也想换工作了,所以整理一下该复习的笔记,也提供大家参考与学习

    • 1、selenium的原理是什么?

    selenium 的原理涉及到 3 个部分,
    
    分别是:
    1.浏览器
    2.driver:一般我们都会下载driver
    3.client:也就是我们写的代码
    运行过程:
    client 其实并不知道浏览器是怎么工作的,但是 driver 知道,在 selenium 启动以后,driver 其实充当了服务器的角色,跟 client 和浏览器通信
    client 根据 webdriver 协议发送请求给 driver,driver 解析请求,并在浏览器上执行相应的操作,并把执行结果返回给 client。这就是 selenium 工作的大致原理。
    • 2、WebDriver提供哪些常见类型的驱动程序?

    WebDriver 中常见驱动程序有(这部分建议在面试前查阅一下官网,做到 实时同步更新): 
    
    1. FirefoxDriver
    2. InternetExplorerDriver
    3. ChromeDriver
    4. SafariDriver
    5. OperaDriver
    6. AndroidDriver
    • 3、webdriver的协议是什么?

    client与driver之间的约定,无论client是使用java实现还是c#实现,只要通过这个约定,client 就可以准确的告诉drier它要做什么以及怎么做。
    
    webdriver 协议本身是 http 协议,数据传输使用 json。这里有webdriver协议所有endpoint,稍微浏览下就知道这些endpoints涵盖了selenium 的所有功能。
    • 4、什么是page object设计模式?

    简单来说就是用 class 去表示被测页面。在 class 中定义页面上的元素和 一些该页面上专属的方法。
    简要:
    • 将页面操作放入一个类整体封装
    • 将页面元素放入一个类整体封装
    • 将页面动作整合一个类,在这个类中将元素跟操作结合成动作
    • 测试用例类,直接调用页面动作类进行测试(测试类)
    • 5、什么是page factory?

    Page Factory 实际上是官方给出的 java page object 的工厂模式实现。
    • 6、如何查找元素是否显示在屏幕上?

    WebDriver 通过 isDisplayed(),isSelected(),isEnabled()
    这三种方法判断 Web 元素的可见性,这类方法将返回结果是布尔类型;
    Web元素可以是按钮,下拉框,复选框,单选按钮,标签等。
    
    ①isDisplayed():boolean b1 = driver.findElement(By.id(“XXX”)).isDisplayed();
    ②isSelected():boolean b2 = driver.findElement(By.id( “XXX”)).isSelected();
    ③isEnabled():boolean b3 = driver.findEleme nt(By.id(“XXX”)).isEnabled();

    • 7、selenium中如何判断元素是否存在?

    selenium 中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断.
    
    # 判断元素是否存在 
    try:
        driver.find_element_by_id('none')
    except NoSuchElementException:
        print 'element does not exist'
    • 8、selenium中hidden或者是display = none的元素是否可以定位到?

    不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。
    • 9、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

    1.增加固定等待或者隐式等待,让页面元素先加载出来
    2.被点击的元素一定要占一定的空间,因为 selenium 默认会去点这个元素的中心点,不占空间的元素算不出来中心点;
    3.如果是元素被遮挡住,先去除遮挡元素,可以使用js或者修改元素属性实现
    4.如果是下拉框,先点击下拉框,在定位里面的值
    5.如果是iframe框架中,则需要先跳入框架中,再去定位元素
    6.判断元素是否能点击/选择
    • 10、selenium自动化页面元素找不到存在异常的原因?

    1.页面没加载出来,就开始点击查找元素
    2.元素被遮挡
    3.元素可能在嵌入的iframe框架当中
    4.定位的元素信息错误,定位方法有问题
    5.定位的元素不在当前页面,需要下拉滚动条才能识别到
    • 11、如何去定位属性动态变化的元素?

    1.使用相对定位的方法,父节点、子节点、兄弟节点定位
    2.可以使用findelements然后去遍历元素取下标定位元素
    3.部分元素属性,xpath中的contains/strats-with/ends-with都可以
    • 12、如何去定位页面上动态加载的元素?

    触发动态事件,继而 findelement;如果是动态菜单,需要一级一级的 find。
    举例:
      下拉框里面的元素定位
    1. 点击下拉框
    2. 点击选中的元素
    • 13、如何提高selenium脚本的执行速度?

    1. 使用更高配置的电脑和选择更快的网络环境;
    2. 使用效率更高的语言,比如 java 执行速度就快过 python;
    3. 优化代码;
    4. 不要盲目的加 sleep,尽量使用显式等待;
    5. 可以考虑分布式执行 或者使用 selenium grid;
    6. chrome 浏览器和 safari 浏览器的执行速度看上去是最快的
    • 14、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

    1. 测试专属 profile,尽量让静态资源缓存;
    2. 尽量使用显式等待;
    3. 尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干
      扰。
    • 15、id,name,clas,xpath,css selector这些定位器,你最偏爱哪一种,为什么?

    xpath 和 css 最为灵活。id、name 等需要开发支持。(因人而异,看你自己喜欢用什么)
    • 16、selenium为什么不推荐使用xpath定位?

    selenium 使用 xpath 定位时采用遍历页面的方式,性能指标较差。
    另外 xpath 定位有通过绝对路径定位的,有时会不准确;
    而用 css 选择器定位比较简洁,运行速度更快,通常用于性能要求严格 的场景。
    • 17、如何去定位页面上动态加载的元素?

    显式等待。(显示等待就是有条件的等待,隐式等待就是无条件的等待, 如 sleep、driver.implicitly_wait())
    显示等待例子: WebDriverWait(driver, 3, 0.5) #传入三个参数,第一个是浏览器驱动,第 二个是等待多少秒,第三个是每隔多少秒监控一次
    • 18、如何去定位属性动态变化的元素?

    找出属性动态变化的规律,然后根据上下文生成动态属性
    • 19、如何通过子元素定位父元素?

    通过父元素定位子元素,可以通过二次定位来找到。
    第一种:通过子元素定位父元素,css/xpath父子级查找,轴定位查找
    第二种:通过 xpath 的语法直接定位。 如.//*[@name="hello"]/.. 两 个点代表父级元素。
    • 20、selenium中隐藏元素定位,你该如何做?

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

    1:用 try...except 在代码块加上 
    法 2:用 elements 定义组元素方法 然后根其元素个数 len()<1 存在 返回 True, 不存在则返回 False 
    法 3:结合 WebDriverWait 和 excepted_conditions 条件判断(强烈推荐)
     WebDriverWait(driver,30,1).until(excepted_conditions.title_contains(u"软件测试部落")) #判断 title,每间隔 1 秒判断一次,30 秒超时,存在返回 True,不存在则返回 False
    • 22、page object设置模式中,是否需要在page里定位的方法中加上断言?

    一般不要,除非是要判断页面是否正确加载。
    • 23、driver.close() 和driver.quit() 有什么区别?

    driver.close() 关闭用户当前正在使用的 Web 浏览器窗口
    quit()方法 用于关闭程序已打开的所有窗口。
    • 24、selenium 上传文件操作,需要被操作对象的type属性是什么?

    file
    • 25、selenium如何处理web弹窗?js弹窗?

    需要使用 driver.switch_to.alert()
    • 26、如何在webdriver中调用应用程序?

    driver.get('url') 或者 driver.navigate().to('url')
    • 27、selenium中常见的异常?

    • NoSuchElementException
    • ElementNoInteractac
    • tableException
    • NoAlertPresentException
    • 28、怎样去选择一个下拉框中的value=xx的option?

    需要二次定位 :
    ①拿到所有的 option;
    ②遍历 option 的 value 并与后台拿到的值进行比较(相同则选择该option)。
    • 29、点击链接以后,selenium是否会自动等待该页面加载完毕?

    不会。所以有的时候,当 selenium 并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium 是否加载完此页面。其次再通过函数查找该元素。
    • 30、selenium 是否可以调用js来对dom对象进行操作?

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

    不能。(可利用 javaScript 来实现拖拽页面滚动条。)
    • 32、selenium可以处理window弹窗吗?

    selenium 本身是不可以处理 windows 弹窗的,但是可以借助 AutoIT 小工具来完成对 windows 弹窗的操作,比如 上传下载附件等。
    • 33、如何在定位元素后高亮元素(以调试为目的)?

    使用 javascript 将元素的 border 或者背景颜色改成黄色或其他颜色即 可。
    • 34、selenium是否有读取excel文件的库?

    没有,需要借助第三方工具。例如 Apache PIO 插件
    • 35、上传图片的几种方式?

    send_keys 和 AutoIT 工具实现.
    可以使用pyautogui
    • 36、selenium是否支持桌面应用软件的自动化测试?

    不支持。selenium 是根据网页元素的属性来确定范围元素的。
    • 37、Selenium是否支持用例的执行的引擎。

    引擎好比就是一个发动机。Selenium 是没有关于测试用例和测试套件管 理和执行的模块。我们需要借助第三方单元测试框架来实现用例管理和 用例的执行。例如 Java 中有 Junit 或者 testNG,python 中有 unittest 单元测试框架。
    • 38、列举Selenium的局限性有哪些?

    Selenium 仅支持基于 Web 的应用程序的测试; 无法使用 Selenium 测试移动应用程序,可以选择 Appium 进行移动端 功能测试;
    验证码和条形码阅读器无法使用 Selenium 进行测试;Selenium 本身不具有生成测试报告的功能,以JAVA 为例,需要结合第三方框架如 TestNG 或 JUnit 来生成测试报告。
    • 39、Selenium如何拖动滚动条

    # 滚动到底部
    # document.body.scrollHeight 是用来获取滚动条的高度
    js = 'window.scrollTo(0, document.body.scrollHeight)'
    driver.execute_script(js)
    • 40、在你做自动化过程中,遇到了什么问题吗?

    当然有遇到问题和挑战,主要有以下几点:
    1. 频繁地变更UI,经常要修改页面对象里面代码
    2. 运行用例报错和处理,例如元素不可见,元素找不到这样异常
    3. 测试脚本复用,尽可能多代码复用
    4. 一些新框架产生的页面元素定位问题,例如ck编辑器,动态表格等
    5. 脚本上传涉及到windows跟mac系统的差异,使用不同的脚本windows可以使用pyautogui,或者是autoit
    6. 多人合作编写测试用例的时候会导致冲突等,使用分excel分表格分模块的方法
    • 40、在Selenium中如何处理多窗口?

    使用切换tab的方法
    用到swithTo方法。需要获取当前浏览器多窗口句柄,然后根据判断跳转新句柄还是旧句柄
    
        #  句柄封装
        def get_window_handle(self):
            """获取句柄"""
            return self.driver.window_handles
    
        def switch_to_window_by_handle(self, window_handle):
            """
            :param window_handle: 切换到某个句柄
            :return:
            """
            self.driver.switch_to.window(window_handle)

    后续持续更新~敬请期待

  • 相关阅读:
    tkinter 表格
    Python编程学习笔记 随时更新
    WIN32窗口程序
    OutputDebugString方便格式化WIN32封装
    免费的剪贴板工具Ditto安装与使用
    Notepad++安装json插件
    华为机试训练题
    Python+Flask+MysqL的web建设技术过程
    python Django 用法总结(转)
    python Robot Framework用法总结(转)
  • 原文地址:https://www.cnblogs.com/yushengaqingzhijiao/p/15737030.html
Copyright © 2011-2022 走看看