zoukankan      html  css  js  c++  java
  • Selenium面试题+答案

    • Selenium是否支持桌面应用软件的自动化测试

    Selenium不支持桌面应用软件的自动化测试,Selenium是通过操作HTML页面中的DOM树上的节点进行模拟用户行为,暂时不支持桌面应用

    • Selenium是否支持用例的执行的引擎。

    selenium只是一个用来操作HTML页面元素的库,并不支持用例的执行引擎,python中需要使用unittest 或pytest 等测试框架完成用例的执行的引擎。

    • Seleinum是否有读取excel文件的库

    selenium无读取excel文件的库,我一般使用openpyxl 库进行excel的读写操作

    • Selenium有哪些组件? 

    Selenium的组件有Selenium Grid(用于调度),webdriver(用于生成对应的浏览器实例,进行模拟用户浏览操作),Selenium IDE(浏览器录制回放)

    • Selenium有什么限制或者缺陷

    Selenium只能完成浏览器或者移动端基于DOM元素的操作,无报告,用例执行引擎等功能

    • 在selenium中,有哪些不同定位元素方法

    id/xpath/name/link_text/className/PartialLinkText/CSS selector,测试脚本编写过程中使用最多的xpath,css这两种

    • 什么是imlicitlyWait (隐式等待)

    全局只需设置一次,元素或脚本执行的结果在设定的最长时间内出现则返回,未出现则在最长时间后抛出找不到元素的异常

    • 什么是expliciteWait (显式等待)

    一般设置两个参数,一个为最长时间,一个为间隔轮询时间,例如WebDriverWait(10,0.5).until(...),则代表每间隔0.5s查询一次元素是否出现,出现则返回,未出现则间隔0.5s后再查找一次。10s后仍未找到则抛出找不到元素异常

    • 什么是线程等待(硬式等待)

    time.sleep(3) 强制当前线程等待3s后再继续执行。

    • 什么是pollingEvery

    python 的selenium中未发现这个,可能是指WebDriverWait中的poll_frequency参数

    • 你写的测试脚本能在不同浏览器上运行吗,支持跨浏览器平台吗

    支持,在初始化driver的时候使用不同的Webdriver即可,我使用pytest做自动化测试时通过定义addoption方法,在pytest启动时根据传参不同,调用不同的浏览器

    • 什么是POM,为什么要使用它

    PageObjectModel,页面对象模型,将页面映射成代码中的类,页面上的元素映射成类中的属性,页面上的操作映射成类的方法,使用POM在进行测试用例编写时只需要调用在页面类中定义好的方法即可,页面发生变动只需修改维护对应页面类中的属性或方法即可,无需修改测试用例,减少因页面频繁变动而造成的大量维护成本。

    • 在你做自动化过程中,遇到了什么问题吗?举例下

    在做UI自动化时,数据的前置我通过接口进行生成,接口返回成功了,但是真正到页面上可查询存在一个时间差,导致case运行失败,我通过参考显示等待的方式,在页面上操作接口生成的数据无法找到时,同样使用类似轮询的机制,未找到,则刷新页面再找,直到超时时间内找到未知,再继续执行后续的case操作。

    有些手工操作时单击的操作通过代码单击会报元素不可点击,使用双击解决。

    UI运行受客户端环境影响较大,我使用docker selenium,保证了每次运行的浏览器实例都是新的无污染。

    • 举例一下你遇到过那些异常,在selenium自动化测试

    超时,元素不可点击,未找到元素,元素没有某个属性

    • 如何处理alert弹窗

    a =driver.switch_to.alert
    a.accept()
    a.dismiss()
    a.text

    • 在selenium中如何处理多窗口?

    driver.window_handles #获取窗口列表
    driver.switch_to.windows(windows_name)

    • 你查找元素遇到过在Frame里面吗?你是如何处理

    暂时没遇到,driver.switch_to.fram(id/name/索引)

    • Frame里面元素定位的?

    切换至Frame内后继续操作即可

    • 怎么验证勾选框是enable/disabled/checked/Unchecked/ displayed/not displayed?

    ele=driver.find_element((locator,value))
    ele.is_displayed()
    ele.is_enabled()
    ele.is_selected()

    • 如何处理下拉菜单?

    我的项目中下拉框是div+li组成的下拉框,无法使用selenium中的select类提供的方法,我通过点击下拉框,唤出菜单,然后使用xpath,定位文本内容进行内容选择点击操作

    • 在日历这种web表单你是如何处理的?

    日历表单如果可点击,可以使用点击操作,如果不可点击可使用driver.execute(js代码),进行赋值操作(据反馈目前一些日历表单可能需要键盘操作配合才可以)

    • 关闭浏览器中quit和close的区别

    close只是关闭窗口,session连接并没有关闭,浏览器进程仍然处于运行状态,quit是断开session连接,浏览器进程关闭

    • 在Selenium中如何实现截图,如何实现用例执行失败才截图

    driver.get_screenshot_as_png()

    在用例执行时进行try expect 异常捕获,expect时截图

    • 在Selenium中如何实现拖拽滚动条?

    使用js进行拖拽,滚动至顶部:driver.execute("windows.scrollTo(0,0)")

    • 如何实现文件上传? 

    文件上传若是input类型的可尝试使用send_keys() 方法(据反馈VUE组件中input类型为file的以无法使用send_keys方法)

    其它类型需使用借助第三方实现.

    • 如何处理“不受信任的证书”的问题? 

    # Firfox
    profile = webdriver.FirefoxProfile()
    profile.accept_untrusted_certs = True
    driver = webdriver.Firefox(firefox_profile=profile)
    # Chrome
    options = webdriver.ChromeOptions()
    options.add_argument('--ignore-certificate-errors')
    driver = webdriver.Chrome(chrome_options=options)
    # IE
    capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
    capabilities['acceptSslCerts'] = True
    driver = webdriver.Ie(capabilities=capabilities)

    • 如何实现鼠标悬停,键盘事件和拖拽动作?

    使用ActionChains类的方法

    click(on_element=None) ——单击鼠标左键
    click_and_hold(on_element=None) ——点击鼠标左键,不松开
    context_click(on_element=None) ——点击鼠标右键
    double_click(on_element=None) ——双击鼠标左键
    drag_and_drop(source, target) ——拖拽到某个元素然后松开
    drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
    key_down(value, element=None) ——按下某个键盘上的键
    key_up(value, element=None) ——松开某个键
    move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
    move_to_element(to_element) ——鼠标移动到某个元素
    move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
    perform() ——执行链中的所有动作release(on_element=None) ——在某个元素位置松开鼠标左键
    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

    使用Keys类实现键盘事件:

    ele.send_keys(Keys.CONTROL,'x') #实现"CTRL + X"

    • 如何获取页面标题,悬浮文本和错误文本,并验证?

    assert driver.title == 'xx标题'

    悬浮文本和错误文本可以使用ActionChains().move_to_element() 然后ele.text

    • 在selenium自动化测试中,你-般完成什么类型的测试?

    回归测试

    • 你是如何管理你的测试用例并执行?

    测试用例按照业务模块划分成以test开头的py文件,pytest测试框架可识别以test开头或结尾的测试类或方法或文件,运行在根目录执行pytest 即可,当需要指定较多的参数或需要其他操作时定义run入口文件,直接运行run文件即可

    • 关于自动化测试报告生成?

    使用的是pytest-html库生成html报告及allure

    • 你如何用Selenium测试?

    将基础通用操作封装成base类,然后页面对象模型继承Base类。

    • 如何解决问题?

    针对UI自动化中遇到的问题,先查看报错信息,定位是自己封装问题则修改封装,非自己代码问题则先看实现相关功能模块依赖库的官方说明文档,官方文档中未解决问题,若是开源库则对应github参考查看issue栏目,最后再百度或谷歌

    • 你是怎么开发测试框架的? 

    • 做自动化测试的目的?

    接口自动化测试可尽快介入项目测试,在联调前发现编码中的问题,在版本更新发布后即进行接口自动化可对既有功能进行验证,保证此次新功能或bug修复对原有功能无影响。UI自动化可减少手工操作,进行兼容性测试。加快版本更新发布进度

    • 如何判断case是否通过?

    接口的case 根据规定的响应状态码 + 接口响应的值 + db 中对应的数据变化进行判断

    UI的case 根据业务场景进行后页面上的变动及相关特定提示语 ,也同样可根据db中的数据状态进行判断

    • 你项目中有多少case,通过率怎么样?

    UI的case 单次运行目前通过率大约在95% 以上,通过加入失败重试机制后大约98%-99%左右

    • 失败截图的原理是什么?

    我在框架中使用driver.get_screenshot_as_png() 方法在Base类中使用try expect在expect时即调用截图方法

    • 报告哪里来,主要统计什么?

    使用第三方库实现,统计用例成功失败,跳过,条数,运行时间、环境等

    • 写出selenium中你最熟悉的接口或者类

     WebDriverWait:显示等待的类

     webdrier.Chrome:实例化Chrome driver实例

    • Xpath是什么?

    一门查找XML文档中信息的语言

    • findElement()和findElements()方法有什么区别

    前者返回一个WebElement对象,后者返回一个由WebElement 组成的list

    • 登录按钮除了click方法还有其他方式吗?

    driver.submit()

    • 怎么对含有验证码的功能进行自动化测试

    简单验证码使用PIL库进行解决,过于复杂,识别难度过高与开发沟通使用通用验证码,或者使用第三方服务提供的图片识别服务

    • 举一个WebDriver中方 法重载的例子

    webdriver.Chrome() 的__init__方法即重载了RemoteWebDriver的__init__方法

    • 你如何模拟浏览器的前后移动?

    driver.forward()

    driver.back()

    • 你如何获得当前页面的URL?

    driver.current_url

    • 如何从文本框中获取打字文本?

    ele.text

    • 你如何清除中文本框的内容?

    ele.clear()

    原文地址:http://www.grassroadsz.top/article/selenium_know/

    --------------------------------------------------------------------------------

    关注微信公众号(测试工程师小站)即可在手机上查阅,并可接收更多测试分享,发送【测试资料】更可获取百G测试教程~

  • 相关阅读:
    剑指offer-包含min函数的栈-栈和队列-python
    计算机系统基础(一):程序的表示、转换与链接(第二周小测验)
    计算机系统基础(一):程序的表示、转换与链接(第一周小测验)
    数据结构与算法(周测2-AVL树)
    数据结构与算法(周测1-算法分析)
    数据结构-排序
    数据结构-图的遍历
    数据结构-图基础
    数据结构-散列查找
    数据结构-堆(优先队列)
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/13460466.html
Copyright © 2011-2022 走看看