python在线教育平台项目面试_【松勤软件自动化测试】selenium+python面试题目总结...

1. WebDriver原理

webDriver是按照client/server模式设计,client就是我们的测试代码,发送请求,server就是打开的浏览器来打开client发出的请求并做出响应。

具体的工作流程:

·webdriver打开浏览器并绑定到指定端口。启动的浏览器作为remote server.

·client通过commandExecuter发送httpRequest给remote server的的侦听端口(the      webdriver wire control通信协议)

·Remote server根据原生的浏览器组件来转化为浏览器的native调用。

备注:启动浏览器的时候,使用的是http: hyper test transfer protocol

2. Selenium 特点和组成

Selenium是一个针对web应用的开源测试框架,它的测试用例可以用html table或者html 代码或者编程语言进行开发,而且他能在几乎所有的现在的浏览器上执行。Selenium可以被部署到windows.linux.mac平台上,支持的语言有java/python/ruby/.net/perl

特点:

·支持录制回放

·多种方式对页面元素进行定位并操作

·能够及进行debug和设置断点

·能够把测试脚本保存成html/ruby或者其他语言

·支持user-extensions.js形式的用户扩展

·能够进行页面的断言

1) Selenium IDE: 是firefox的插件,可以录制/回放/测试脚本

2) Selenium RC:支持程序语言(java/C#/python/ruby)编写测试用例; selenium和其他测试框架集成,比如java环境下将selenium和Junit集成,利用selenium来书写测试用例,用Junit来实现测试用例的自动化运行。

3) Selenium Core:是selenium的核心,是有js和html文件组成,它是selenium IDE和selenium RC的核心引擎。

4) Selenium Grid:是selenium的扩展,可以将一批selenium脚本分配到不同的测试机上同步运行。即selenium grid可以在不同的主机上建立主节点(hub)和分支节点(node), 可以使主节点上的测试用例在不同的分支节点上运行。对于不同的节点来说,可以搭建不同的测试环境(操作系统/浏览器)。

3. Selenium内部运行机制

4. 如何提高自动化脚本稳定性

找原因

1)网速原因,增加时间等待

2)函数原因,尽量少使用容易冲突的函数

3)配置testNG实现多线程,在编写测试用例的时候,一定要实现松耦合,在服务器允许的情况下尽量设置多线程运行,提高执行速度。

5. 高质量自动化脚本特点

业务和代码分离,封装型好。

自动化用例耦合性低,独立性强,易于扩展维护

6. 自动化测试缺陷

不稳定

可靠性不强

不易维护

成本与收益

7. 自动化用例的执行策略

根据自动化执行的目的来决定

(1)自动化测试用例执行用来监控,可以设置用例定时执行;

(2)用于回归测试,可以把测试用例设置成触发式执行;

(3)不需要经常执行的测试用例,可以由人工执行。

8. 提高selenium脚本的执行速度方式

(1)减少操作步骤,减少不必要的操作;

(2)中断页面加载,如果页面加载内容过多并且加载的内容不影响我们测试,可以设置超时时间,中断页面加载;

(3)设置等待时间的时候,可以sleep()固定的时间,检测到元素出现后中断等待也可以提高速度;

(4) 配置testNG实现多线程,在编写测试用例的时候,一定要实现松耦合,在服务器允许的情况下尽量设置多线程运行,提高执行速度。

9. 元素定位

1) Id定位

find_element_by_id(‘kw’)   //通过id属性定位

2) Name定位

find_element_by_name(‘wd’)    //通过名字进行定位,名字一般不唯一,一般不能        通    过其定位

3) ClassName定位

find_element_by_class_name(‘cn’)   //通过类名进行定位

4) TagName定位

find_element_by_tag_name(‘input’)  //标签,一般用于一类元素的定位

5) LinkText定位

find_element_by_link_text(‘新闻’)  //文本链接定位

6) PartialLinkText定位

find_element_by_partial_link_text(‘一个很长的’) //文本链接的部分文字

7) 绝对路径定位

find_element_by_xpath(‘/html/body/div/div[2]/form/span/input[2]’) //绝对地址定位,                 利用层级定位

find_element_by_xpath(‘//input[@name=’n’ and id=’kw’]’) //当前页面某个目录下                         name为n,id为kw的input标签,利用元素属性进行定位

find_element_by_xpath(‘//*[@id=kw]’) //其中*表示任何属性,表示id为kw的任何属                 性的元素

find_element_by_xpath(‘//span[@class=’c’]/input’) //层级和属性结合进行定位

find_element_by_xpath(‘//a[contains(href , ’test’)]’)

8) 相对路径定位

相对路径定位一般比绝对路径定位快。

find_element_by_css_selector(‘.class1’) // 类名定位 .class

find_element_by_css_selector(‘#id’) //id定位 #id

find_element_by_css_selector(‘input’) // 标签名定位

find_element_by_css_selector(‘[autocomplete=off]’) //属性定位

find_element_by_css_selector(‘span>input’) //标签名为span的input子元素

9) 定位一组元素

Checkboxes = find_elements_by_tag_name(‘checkbox’)

for checkbox in Checkboxes:

checkbox.click()  # 通过for循环全选所有的checkbox

Checkboxes.pop().click()  #取消勾选一些checkbox,pop(-1)=pop()表示一组元素的最后一个;pop(0)      表示一组元素的第一个,pop(1)表示一组元素的第二个,以此类推

10) 父子/兄弟/相邻节点的定位

·父->子

Find_element_by_id(‘parent’).find_element_by_tag_name(‘input’) 串联寻找

Find_element_by_xpath(‘//input/div[@name=’n’]/span/input[1]’)  xpath的层级

Find_element_by_css_selector(‘div#b>input’) css selector的父子关系

·子->父

Find_element_by_xpath(‘//div[@id=’c’]/../..’)其中//div[@id=’c’]的父亲的父亲

·哥哥->弟弟

Find_element_by_xpath(‘//div[@id=’c’’/../div[1])找到弟弟后找父亲然后找哥哥

Find_element_by_css_selector(‘div#d+div’) 表示id=d的div后面紧跟着的div

Find_element_by_css_selector(‘div#d~div’) 表示id=d的div后面同一级所有div

11) 二次定位

Element1 = driver.find_element_by_id(‘ID1’)

Element2 = Element1.find_element_by_id(‘ID2’)

12) display: none 和hidden的区别

共同点:把网页中的某个元素隐藏起来;他们在selenium中都是定位不到的。

区别:display:none不为隐藏的对象保留其物理空间,该对象在这个页面上彻底消失,看不到/摸不到;hidden使对象在网页上不可见,但该对象在网页中依然占有空间,看不到/摸得到。

备注:isElementPresent()来判断元素是否存在。

10. 常见控件使用

1) link/button:

element.click()

注:ajax不能使用clickAndWait()函数,因为cickAndWait函数会在click之后等待页面重新加载完成,而ajax是部分刷新,所以这个页面不能重新加载完成。

2) Textbox:

element.send_keys(‘test’)

3) Upload

Driver.find_element_by_id(‘id’).send_keys(‘D\test.txt’)

4) Mouse Event:

e1=driver.find_element_by_id(‘kw’)

ActionChains(driver).double_click()/.context_click()/.drag_and_drop()/.move_to_eleme        nt()/.perform()   # 双击/右击/拖动/悬停/执行actionChains中的行为

5) Dropdown:

·标签的下拉菜单

from selenium.webdriver.support.ui import Select

Select(driver.find_element_by_id(‘gender’)).select_by_index(1)

Select(driver.find_element_by_id(‘gender’)).select_by_value(“2”)

Select(driver.find_element_by_id(‘gender’)).select_by_visible_text(“Male”)

·非标签的下拉菜单

Dropdown1 = driver.find_element_by_id(‘id’) #先定位到dropdown

Dropdown1.find_element_by_id(“li2_input_2”) #再定位到dropdown中的值

6) Alert:

driver.switch_to.alert.accept()//接受

driver.switch_to.alert.dismiss() //取消

Message=driver.switch_to.alert.text  //获取弹窗的文本消息

driver.switch_to.alert.send_keys(‘hello’) //输入值,这个在alert和confirm中不可用

7) Window

Driver.refresh() 刷新

Driver.back() 后退

Driver.forward() 前进

Driver.maximize_window() 最大化

Driver.set_window_size(100,200) 设置窗口大小

Driver.switch_to.window(searchwindow)

8) Frame

Driver.switch_to.frame(ReferenceFrame)

Driver.switch_to.parent_frame()  # frame需要一级一级切

Driver.switch_to.default_content()

11. 等待

1) 显式等待

等待某个条件成立时继续执行,每隔一段时间进行检测,超出最大时间    则抛出异常(程序每隔X秒看一眼,如果条件成立,执行下一步,否则等待,超出最大    时间,抛出异常)

From selenium.webdriver.common.by import By

From selelnium.webdirver.support.ui import WebDriverWait

From selenium.webdriver.support import expected_conditions as EC

E = WebDriverWait(driver, 5,0.5).until(

EC.presence_of_element_located( (By.ID, ‘kw’) )

)

2) 隐式等待

隐式等待中的时间并非一个固定的等待时间,它并不影响脚本的执行速度。比如进行某元素的定位时,如果元素可以定位就继续执行,如果目前定位不到就以轮询的方式持续判断该元素是否被定位到,如果超过规定的时间还没定位到就抛出异常。(甲约乙去吃饭,甲在这里等着,等了10分钟乙到达,则从10分钟之后开始下一步,假如等了20分钟,则20分钟后开始下一步,如果到了最大时间30分钟还没到就抛异常)

driver.implicitly_wait(20)

3) 强制等待

From time import sleep

Sleep(2)

12. 截图

driver.get_screenshot_as_file('E:\sc.jpg')

13. 线性测试

开发维护成本高

14. 模块化驱动测试

将重复的操作独立为公共模块,尽量消除重复,提高测试用例的可维护性。

15. 数据驱动测试

数据参数化

1) 读取txt文件

File= open(‘E:\wtest.txt’, ‘r’)

Lines = File.readlines()

For line in lines:

User = line.split(‘,’)[0]

Passw=line.split(‘,’)[1]

Print(User, Passw)

2) 读取csv文件

UnicodeDecodeError (未找到解决方案)

3) 读取xml文件

16. 关键字驱动测试

脚本/数据/业务 分离

17. page object设计模式

是将page对象封装成一个HTML页面,通过提供的应用程序特定的API来操作页面元素,而不是在html中来搜寻对象,即提供一个易于编程的接口并隐藏窗口中底层的部件,对界面的交互细节进行封装。

优点是:减少了代码的重复/提高测试用例的可读性/提高测试用例的可维护性(特别是UI频繁变化的项目)

page object设置模式中,不需要在page里定位的方法中加上断言(why)

18. Assert断言

-断言的英文是assertion,断言检查的英文是assertion checking。

-断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。

Assert判断如果出现错误,则会中断整个测试;使用verify进行判断如果出现错误仍会继续执行直到结束。

19. Dsfdsadsaf

20. Dsaf倒数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7打开计算机死机,win7系统进入桌面总是死机或者卡死怎么办

??最近有位深度技术win7旗舰版用户的电脑总是在进入桌面的时候莫名其妙的死机或者卡死,遇到这种情况我们应该怎么办呢?我们可以通重启资源管理器来解决屏幕卡死的问题,首先我们要打开任务管理器,下面由小编来跟大家介绍一下win7…

二级计算机excel以宏保存,Excel宏保存

2 个答案:答案 0 :(得分:3)像这样 -Sub SaveSheet()Dim wbkDashboard As WorkbookDim wsTarget As WorksheetSet wsTarget Thisworkbook.worksheets("Sheet1")Dim strFileName As StringstrFileName wsTarget.Range("B8").Value _& Forma…

以太网例程_开关量转以太网的应用

由于工业以太网的快速冗余自愈能力以及实时性方面问题的逐步解决,工业以太网技术正在逐步深入至工业控制网络的现场设备层应用,即直接基于工业以太网通信来控制现场设备的运行,利用开关量控制模块提供的以太网转开关量功能,计算机…

hbase+hive应用场景

一.Hive应用场景本文主要讲述使用 Hive 的实践,业务不是关键,简要介绍业务场景,本次的任务是对搜索日志数据进行统计分析。集团搜索刚上线不久,日志量并不大 。这些日志分布在 5 台前端机,按小时保存,并以小…

CPU缓存越大计算机的性能越好,CPU缓存真的越大越好?小心你的钱包

除了内存和硬盘,电脑还有一种超快速的存储设备,就是CPU缓存当你想到你电脑当中的存储设备时,你可能想到的是DDR内存、显卡上的显存、或者更有可能只是机械硬盘和SSD。但其实还有一种超快速的存储设备,对我们习以为常的、现代电脑的…

rostcm6情感分析案例分析_电商评论情感分析

并可以实现云图的可视化.7.2 R的实现这里需要安装几个必须包,因为有几个包安装比较复杂,这里给了链接http://blog.csdn.net/cl1143015 ... 82731大家可以参看这个博客安装包.安装完成后就可以开始R文本挖掘了,下面代码说明性文字比…

JavaScript之substring()方法讲解

定义和用法 substring() 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substring(start,stop) 参数描述start必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。stop 可选。一个非负的整数,比要提取…

jvm 参数-server_JVM选项:-client vs -server

jvm 参数-server您是否曾经在运行Java应用程序时想知道-client或-server开关是什么? 例如: javaw.exe -client com.blogspot.sdoulger.LoopTest也显示在java.exe的“帮助”中,例如,其中的选项包括: -client选择“客户…

小米3显示sim卡无服务器,小米手机无服务怎么解决

原标题:小米手机无服务怎么解决方法一:1.第一步是检查电话卡是否正确插入卡槽中。这种情况也会发生很长时间。如果未正确插入卡插槽,则将导致无法维修。2.要注意的第二件事是,如果所购买的小米手机是电信版的,那么插入…

python消息订阅_python rabbitmq消息发布订阅

发送端:import pikaimport sysconnection pika.BlockingConnection(pika.ConnectionParameters(hostlocalhost))channel connection.channel()channel.exchange_declare(exchangelogs,exchange_typefanout)message .join(sys.argv[1:]) or "info: Hello Wo…

使用before、after伪类制作三角形

使用before、after伪类实现三角形的制作&#xff0c;不需要再为三角形增加不必要的DOM元素&#xff0c;影响阅读。 <!DOCTYPE html><html><head> <style> div{ width: 100px; height: 100px; border: 1px …

EJB的超时策略:它们如何提供帮助?

EJB 3.1在其API中引入了与超时相关的注释。 AccessTimeout StatefulTimeout 让我们快速看一下它们是什么以及它们为什么重要 AccessTimeout 指定一个排队请求&#xff08;等待另一个线程完成&#xff09;超时的时间段。 当您的会话bean实例被并发请求轰炸时&#xff0c;EJ…

cad服务器手动改自动,几百块就能手动改自动? 怎样省钱换来方便

现在市场上可以手动改自动挡是真的吗?今日市场上出现的手动挡升级自动挡的技术&#xff0c;不少网友询问这个手动挡改自动挡技术&#xff0c;手动改自动挡真的吗?记者带着疑问进行各方面搜索和调查。经过调查&#xff0c;记者终于了解到市场上真的有这种技术&#xff0c;可以…

Windows Phone性能优化建议

Windows Phone性能优化建议 原文:Windows Phone性能优化建议使用background thread解码图片在Windows Phone中支持的图片格式有jpg和png&#xff0c;微软建议使用png格式的图片&#xff0c;因为png格式的图片在解码速度上要比jpg快。那么我们怎么来控制用后台线程来解码图片呢&…

opencv检测相交点_OpenCV特征点检测------ORB特征

ORB是是ORiented Brief的简称。ORB的描述在下面文章中&#xff1a;Ethan Rublee and Vincent Rabaud and Kurt Konolige and Gary Bradski, ORB: an efcient alternative to SIFT or SURF, ICCV 2011没有加上链接是因为作者确实还没有放出论文&#xff0c;不过OpenCV2.3RC中已经…

用Java创建MongoDB上限集合

在MongoDB中&#xff0c;可以以循环方式将文档的插入顺序保留到集合中。 这些类型的集合在MongoDB中称为上限集合。 MongoDB文档描述了上限集合&#xff1a; 上限集合是固定大小的集合&#xff0c;它们支持高吞吐量操作&#xff0c;这些操作根据插入顺序来插入&#xff0c;检索…

服务器物理部署拓扑图,【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(五)-物理服务器路由方案及配置...

5.1 本节目标理解物理机的业务ip之间的通信过程&#xff1b;了解如何在leaf交换机上配置业务ip的静态路由&#xff1b;了解如何在物理机上配置业务ip及其他相关配置项&#xff1b;5.2 拓扑结构本节拓扑结构与上节相比没有变化&#xff0c;如下图&#xff1a;5.3 物理机业务网络…

axios队列 vue_vue axios全攻略

不再继续维护vue-resource&#xff0c;并推荐大家使用 axios 开始&#xff0c;axios 被越来越多的人所了解。本来想在网上找找详细攻略&#xff0c;突然发现&#xff0c;axios 的官方文档本身就非常详细&#xff01;&#xff01;有这个还要什么自行车&#xff01;&#xff01;所…

linux内核模块简介

linux内核是一个整体是结构。因此向内核添加任何东西。或者删除某些功能 ,都十分困难。为了解决这个问题。引入了内核机制。从而可以动态的想内核中添加或者删除模块。模块不被编译在内核中,因而控制了内核的大小。然而模块一旦被插入内核,他就和内核其他部分一样。这样一来 就…

移动app显示远程服务器错误,KIS移动应用常见问题汇总

1、移动应用平台正式版登录后&#xff0c;变成试用版/已过期答&#xff1a;更新移动应用平台到最新版本V4.0.0.2&#xff0c;下载地址&#xff1a;http://dwz.cn/kis0268多次退出移动应用平台&#xff0c;直到变成正式版&#xff0c;重新启动移动应用。2、移动应用使用过程中提…