精华内容
下载资源
问答
  • WEB自动化测试框架文档.docWEB自动化测试框架文档.docWEB自动化测试框架文档.docWEB自动化测试框架文档.docWEB自动化测试框架文档.docWEB自动化测试框架文档.doc
  • web自动化测试框架

    千次阅读 2019-01-04 15:48:38
    AutoMagic自动化测试平台简介 https://www.cnblogs.com/tsbc/p/6244268.html   安装过程中遇到的问题及解决方案 1、 https://blog.csdn.net/love_parents/article/details/80938818 2、...
    展开全文
  • 测试小白,想问下web自动化测试下的Selenium2 和Robot Framework 和Macaca有什么关系, 都有些什么优缺点呢?求大神指点下
  • Web自动化测试框架

    千次阅读 2021-06-10 20:31:46
    1.什么框架框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。 框架是整个或部分系统的可重用设计,表现为一组抽象构件及...

    1.什么是框架?     

    框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。          

    框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。          

    框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。

    2.为什么使用框架?     

    1)自己从头实现太复杂     

    2)使用框架能够更专注于业务逻辑,加快开发速度     

    3)框架的使用能够处理更多细节问题     

    4)使用人数多,稳定性,扩展性好

    3.Selenium工作原理 webdriver工作原理

    selenium环境搭建

    1.材料:          

    1)python3.7     

    2)Firefox35(大于43)     

    3)selenium2框架         稳定版 2.48.0    (pip install selenium==2.48.0)     

    4)浏览器驱动 

    Selenium

    Selenium的IDE(集成开发环境)是一个易于使用的Firefox插件,用于开发Selenium测试案例。它提供了一个图形用户界面,用于记录使用Firefox浏览器,用来学习和使用Selenium用户操作,但它只能用于只用Firefox浏览器不支持其它浏览器。

    IDE功能简介

    1.文件:创建、打开和保存测试案例和测试案例集。编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令。Options : 用于设置seleniunm IDE。

    2.用来填写被测网站的地址。

    3.速度控制:控制案例的运行速度。

    4.运行所有:运行一个测试案例集中的所有案例。

    5.运行:运行当前选定的测试案例。

    6.暂停/恢复:暂停和恢复测试案例执行。

    7.单步:可以运行一个案例中的一行命令。

    8.录制:点击之后,开始记录你对浏览器的操作。

    9.案例集列表。

    10.测试脚本;table标签:用表格形式展现命令及参数。source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示。

    11.查看脚本运行通过/失败的个数。

    12.当选中前命令对应参数。

    13.日志/参考/UI元素/Rollup

    浏览器驱动对象        

     1)库的导入       

     from selenium import  webdriver        

     2)创建浏览器对象                  

    driver = webdriver.xxx()                   

    使用dir(driver)查看方法     

    3)浏览器尺寸相关操作                  

    maximize_window()        最大化                

     get_window_size()        获取浏览器尺寸         

    set_window_size()        设置浏览器尺寸

     

    浏览器位置相关操作                          

    get_window_position()        获取浏览器位置         

    set_window_position(x,y)        设置浏览器位置                  

    注:显示器以左上角为(0,0),所有的位置操作都是相对于显示器左上角展开的位移操作,单位是像素。     

    浏览器的关闭操作                

     close()            关闭当前标签/窗口         

    quit()            关闭所有标签/窗口

    页面请求操作

    driver.get(url)        请求某个url对应的响应         

    refresh()                刷新页面操作         

    back()                回退到之前的页面         

    forward()                前进到之后的页面

    获取断言信息        

     0)什么是断言?       

    断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。          

    1)获取断言信息的操作       

    current_url                获取当前访问页面url       

    title                获取当前浏览器标题         

    get_screenshot_as_png()           保存图片         

    get_screenshot_as_file(file)       直接保存                

    page_source                  网页源码

    元素的定位              

    1)元素定位方法的分类(调用方式):                  

    1.直接调用型(推荐方式)             

    driver.find_element_by_xxx(value)                  

    2.使用By类型(需要导入By)             

    from selenium.webdriver.common.by import By             

    driver.find_element(By.xxx,value)

    元素定位方法的分类(按定位方式):

    八种定位方式的示例:

    1. driver.find_element_by_xpath(value)                      

    2. driver.find_element_by_css_selector(value)              

    3. driver.find_element_by_id(value)                          

    4. driver.find_element_by_name(value)

    5. driver.find_element_by_class_name(value)                    

    6. driver.find_element_by_tag_name(value)             

    7. driver.find_element_by_link_text(value)                      

    8. driver.find_element_by_partial_link_text(value)

    元素的操作              

    对元素的相关操作,一般要先获取到元素,再调用相关方法     element = driver.find_element_by_xxx(value)          

    1)点击和输入         点击操作             element.click()                  

    清空/输入操作(只能操作可以输入文本的元素)             element.clear()            

    清空输入框             element.send_keys(data)        输入数据

    多标签之间的切换     

    场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。          

    1)获取所有窗口的句柄         

    handles = driver.window_handlers()         

    调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。     

    2)通过窗口的句柄进入的窗口         

    driver.switch_to_window(handles[n])                  

    driver.switch_to.window(handles[n])         

    通过窗口句柄激活进入某一窗口

    多表单切换     

    在网页中,表单嵌套是很常见的情况,尤其是在登录的场景     

    1)什么是多表单?         

    实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面     

    2)处理方法                

     直接使用id值切换进表单             

    driver.switch_to.frame(value)/driver.switch_to_frame(value)         

    定位到表单元素,再切换进入             

    el = driver.find_element_by_xxx(value)             

    driver.switch_to.frame(el)    /driver.switch_to_frame(el)

    多表单切换举例:

    弹出框操作          

    1) 进入到弹出框中         driver.switch_to.alert     

    2) 接收警告         accept()     

    3) 解散警告         dismiss()     

    4) 发送文本到警告框         send_keys(data)

    鼠标和键盘操作     

    手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供     

    1)鼠标操作    

    导入动作链类,动作链可以储存鼠标的动作,并一起执行         

    from selenium.webdriver import ActionChains         

    ActionChains(driver)                      

    鼠标右击             

    el = driver.find_element_by_xxx(value)             

    context_click(el)             

    对el执行右击         

    执行ActionChains中储存的所有动作             

    perform()

    鼠标和键盘操作     

    1)键盘操作         

    键盘操作使用的是Keys类,一般配合send_keys使用       

    导入         

    from selenium.webdriver.common.keys import Keys       

    常用键盘操作             

    send_keys(Keys.BACK_SPACE)     删除键(BackSpace)                          

    send_keys(Keys.SPACE)         空格键(Space)                        

    send_keys(Keys.TAB)             制表键(Tab)                          

    send_keys(Keys.ESCAPE)         回退键(Esc)                          

    send_keys(Keys.ENTER)         回车键(Enter)                          

    send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)

     常用键盘操作             

    send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)                          

    send_keys(Keys.CONTROL,‘x’)     剪切(Ctrl+X)                          

    send_keys(Keys.CONTROL,‘v’)     粘贴(Ctrl+V)                          

    send_keys(Keys.F1)             键盘 F1             

    ……             

    send_keys(Keys.F12)             键盘 F12

    浏览器等待          

    1) 为什么要进行等待?                  

    1.网速慢         

    2.网站内容过多         

    3.如果不进行等待而直接定位元素,可能会抛出异常   

     2) selenium中等待的分类:                  

    显示等待                  

    隐式等待

    显示等待         

    显示等待是根据条件进行等待,等待条件出现                  

    实现:             

    from selenium.webdriver.common.by import By             

    from selenium.webdriver.support.ui import WebDriverWait             

    from selenium.webdriver.support import expected_conditions as EC       

     WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)                                                         

    WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,         

    默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。                  

    WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located( (By.CLASS_NAME,"g-hu")))

    隐式等待       

    隐式等待是根据是件进行等待,等待特定时间             

    driver.implicitly_wait(n)         

    n的单位为秒,n为最大值,在这个最大值内只要该界面上的全部元素都加载完成定就结束没有加载出元素就抛出    

    NosuchException.          

    优先 隐式等待     

    次之 显式等待 最次 固定等待

     

    展开全文
  • Web UI自动化框架搭建

    千次阅读 2018-05-26 20:09:20
    大家可以根据自己项目技术栈,选择合适的语言+外加Unit Test框架,来构建自己的Web UI自动化项目。比如:Java+Selenium+JUnit/TestNG,Python+Selenium+UnitTest等。 页面元素定义 方法库 层级结构组织 页面...

    本篇博文只从项目架构角度,提供一些建议供参考。不涉及具体代码编写。目前市场上主流的免费开源工具就是Selenium。大家可以根据自己项目技术栈,选择合适的语言+外加Unit Test框架,来构建自己的Web UI自动化项目。比如:Java+Selenium+JUnit/TestNG,Python+Selenium+UnitTest等。

    整体而言,Web UI自动化框架主要包含以下三部分:
    1. 页面元素定义
    2. 方法库
    3. 层级结构组织

    有了这三部分,一个框架基本就搭起来了。再在层级结构最底层,添加自动化测试用例,让它继承自合理的父页面,并能调用合适的方法库,完成脚本运行和验证即可。


    页面元素定义

    关于如何做好页面元素定义,我在之前的博客里有过一些建议:如何让Web UI自动化测试更加稳定
    这里还想在补充几点:

    • 一般来说,一个页面对应一个类。这个类里包含了这个页面的各个控件元素。每个元素,以类的属性成员方式存在,且这个属性不能被子类更改(在Java里,可以定义成private属性,然后提供public/protected get方法。C#简单些,定义成public属性,然后仅提供get方法)
    • 页面类里应只包含控件元素定义,不要掺杂方法。页面对应的方法应新起一个方法库类,名字可以叫做xXPageFuncLib,与页面类对应,放在项目同一层。

    方法库

    方法库主要放对应页面的元素操作方法,方法库对于构成最终的自动化测试脚本很重要,因为脚本里的一步步操作,基本要靠方法库来实现。

    方法库里的方法,最好保持原子性,完成一些密不可分的基本操作。方法不应过长。过长的最好按照功能步骤,拆分开来。

    除了页面对应的方法类库以外,每个项目,一般都会有自己的一些公用方法类库,比如,ExcelUtil类库,存放excel操作方法;BaseUtil类库,放一些更加公用基础的方法,生成唯一的时间戳字符串,字符串合并等。


    层级结构组织

    层级结构组织,其实就是将页面元素组织起来,构成页面。再通过合理的继承,让处于类关系图谱最底层的一个个的auto test case拥有合适的父类页面,父类方法库,以完成自身的测验步骤、测验点。

    一般而言,将浏览器的启动,关闭等操作,放到root class里,这样所有的最底层的auto test case就可以仅关注于自身步骤,验证,不用重复编写测试前浏览器启动,测试结束后浏览器退出等操作。

    展开全文
  • 自己动手写Web自动化测试框架

    千次阅读 2013-07-30 17:50:27
    首先定义一下Web自动化测试框架Web自动化测试框架是一个类库,他可以帮助测试人员快速写出Web自动化测试代码,并帮助测试人员在自动化报错的时候快速找到Bug。 目前市场上成熟的Web自动化测试框架有不少,很出名...

    记得几年前一本《自己动手写操作系统》在全国的技术范围内引起了学习操作系统的热潮。我不才在这里使用这本书的大名,来分享一下我在写Web自动化测试框架上面的一些经验。 首先定义一下Web自动化测试框架:Web自动化测试框架是一个类库,他可以帮助测试人员快速写出Web自动化测试代码,并帮助测试人员在自动化报错的时候快速找到Bug。

    目前市场上成熟的Web自动化测试框架有不少,很出名的是Watir,是用现在大名鼎鼎的Ruby写成的,相对于Watir,有一个也很不错的.net版本,就是WatiN,WatiN可以说是市面上可以找到的最好的C# Web自动化测试框架。微软和其他的大公司也有自己的一些Web自动化测试框架,但是公布的并不多。

    我这里将会使用C#,一步一步的写出一个最简单不过的自动化测试框架。这个框架的功能是基本可以测试简单的没有Ajax,没有框架,没有Windows对话框的一些网页。而如何测试Ajax之类的网页,我将会在其他的专题中写出。

    首先我们看使用的非托管的类库。我们在这里将会使用两个非托管类库:mshtml.dll和Interop.SHDocVw.dll。 mshtml是微软IE的核心类库,下面是Wiki百科的解释

    Trident (also known as MSHTML) is the name of the layout engine for the Microsoft Windows version of Internet Explorer. It was first introduced with the release of Internet Explorer version 4 in October 1997, has been steadily upgraded and remains in use today. For version 7 of Internet Explorer, Microsoft made significant changes to the Trident layout engine to improve compliance with web standards and add support for new technologies.

    开发人员可以通过mshtml提供的接口,访问到IE布局对象,从而达到对Web的控制和检查。

    另一个类库Interop.SHDocVw.dll则提供了一个InternetExploer的接口,可以帮助我们操纵IE进程,并且进行一些简单的如前进,后退等操作。

    这两个类库如果装了VS2005都可以找到。mshtml是IE自带的,在项目中选择添加引用,然后在.net标签下面找到Microsoft.mshtml就可以找到了。而Interop.SHDocVw要复杂一点,添加引用中,选择浏览标签,然后在下面的路径就可以找到:C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition

    这一个部分我们来讲用SHDocVw对IE进行操作。

    接下来的几篇文章我们都会以Console Application来向大家介绍Web自动化的一些基础。

    以下的代码在VS2005上通过测试,相信在VS2005 express已经VS2008上也可以通过,不过在VS2003上可能要稍微修改。使用vs2003的朋友,建议大家使用VS2005 express。

    浏览器使用了IE7。 IE6以及更低版本并没有做过试验。

    首先我们打开VS2005,建立一个Console Application项目:

    新建一个命令行工程

    接下来我们需要包含两个引用了,就是mshtml和SHDocVw。

    包含mshtml引用

    第二个SHDocVw一定要在下面这个路径找:(C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition)

    包含SHDocVw

    包含两个类库之后,我们就可以使用C#来对IE进行一些基本的操作了。

    我们要添加几个命名空间,来简化我们下面的代码:

    using System.Diagnostics; //要用到进程来启动IE窗口

    using System.Threading; //使用Thread.Sleep来等待

    using SHDocVw;

    using mshtml;

    除了mshtml和SHDocVw之外,我们还使用了其他的两个命名空间,因为我们要使用System.Diagnostics.Process类启动IE进程,并且获取IE的进程信息,使用System.Threading.Thread的sleep()方法等待

    接下来,我们就可以写入代码了:

    Console.WriteLine("Launching IE ...");

    Process p = Process.Start("iexplore.exe","about:blank");

    Thread.Sleep(3000);

    第一步,我们要打开IE进程,这里使用了Process的Start静态方法生成一个进程。很好理解,传入了两个参数,一个是IE的exe文件名,也可以写入完整地址;第二个参数是IE自己的参数,表示要打开的链接地址,我们在这里使用一个空白页面。

    接下来的事情就是等待,等待IE进程启动,这里为了让大家更快的抓到本质,没有使用很复杂的等待代码,只是很机械的等待了3秒钟,大家可以根据自己机器的状况进行修改。

    这里为了让大家可以更好的理解,我插一点Process的讲解,如果大家对上面的Process打开没有任何问题的话,直接跳过往下就好了。这里Process.Start()方法其实有4个重载,我们使用了第三个重载函数,也就是第一个输入文件名,第二个输入参数,我们可以在运行命令行中打"iexplore about:blank"直接打开一个空的IE窗口,也可以打"iexplorehttp://www.colblog.net/"直接打开一个浏览到目标网站的IE窗口

    IE启动了,我们接下来的事情就是把IE附加给SHDocVw.InternetExlporer以便我们可以进行接下来的操作。

    上面的两次课程我们介绍了mshtml和SHDocVw的一些用途,以及如何打开并且附加到IE上,实现IE的宏观上的控制。

    这次我们将会用代码找到我们想要的控件,然后对控件进行一些操作。

    首先我们引入一个很好的IE控件:Internet Explorer Developer Toolbar,这个控件可以帮助我们方便的找到我们想要的控件的属性。

    安装好这个控件之后,我们就可以方便的找到每一个控件的ID,或者其他属性了,如下图

    IE Developer

    注意,打开IE Developer Toolbar之后,要点选下面的鼠标按钮,才可以用鼠标来选择我们想要的控件。有了这个控件,我们就不用去查看源文件来找到我们想要的信息了。其他的功能这里不多说了。

    接下来我们以百度的三个控件为例,分别告诉大家如何使用ID得到TextBox,如何点击使用ID得到的Button,如何使用子控件缩小范围的方法得到一个HyperLink。

    首先我们修改上次的代码,把IE指到百度去:

    Console.WriteLine("Navigating ...");

    object o = null;

    ie.Navigate("baidu.com", ref o, ref o, ref o, ref o);

    Thread.Sleep(2000)

    打开和操纵IE都讲解过了。只有一点,我们在完成IE的跳转之后,等待了2秒钟的时间,原因是IE的工作是需要时间的,我们在后面的测试框架部分会讲解如何判断IE已经完成了页面的跳转,在这里为了让大家更好的了解我们本节的主题,只是用了简单的等待。

    然后我们用IE Developer Tools得到了关键字文本框的ID是kw,所以我们用下面的代码在关键字文本框里面输入了我们想要的关键字:

    //得到一个Text Box

    Console.WriteLine("Inputing Keyword ...");

    HTMLDocument doc = (HTMLDocument)ie.Document;

    HTMLInputElement keyword = (HTMLInputElement)doc.getElementById("kw");

    keyword.value = "colblog.net";

    Thread.Sleep(1000);

    首先我们用ie.Document对象得到了HTMLDocument。目的没什么可说的,因为我们需要HTMLDocument得到下面的控件。而这里之所以使用强制类型转换,是因为Document对象在这里返回一个object的引用,但其实是一个HTMLDocument的实例。所以转换一下就好了,在mshtml里面,这种情况还不少,在msdn上有详细的讲解,使用的时候查一下就好了。

    然后使用HTMLDocument.getElementById方法,直接从Document里面按照ID取出想要的控件,返回一个 IHTMLElement,IHTMLElement是HTMLElement的抽象,所有的HTML的tag都可以是一个IHTMLElement,返回这样的一个引用,我们在知道将会返回什么类型的情况下,可以使用强制类型转换来把对象转成我们想要的引用。就像上面我们所做的,返回的其实是一个 Input tag,所以我们要把他转换成HTMLInputElement就好了。

    下面一句我们直接对这个对象的value进行设置,就可以完成在关键词文本框里面输入我们想要的关键词的动作。

    接下来我们要点击搜索按钮:

    有了上面文本框的解释,这一段代码就容易多了吧。这里不在赘述。

    聪明的读者一定会问:我们现在使用ID查询控件,如果我们的控件没有ID怎么办?如果ID是重复的怎么办?

    上面的两种情况都是完全可能的,而且在实际中几乎占据了大部分的情况。(不过ASP.NET里面的控件倒是都有ID,使用这种方法比较方便。)我们下面的例子就是去点击百度首页右上角的登录超级链接。

    首先我们分析一下,登录超级链接是放在一个id为u的div里面,而登录超级链接是没有ID的。我们的思路就是先找到这个id为u的div,然后找他的chidren找到我们想要的这个超级链接,下面是源代码:

    //得到一个链接

    Console.WriteLine("Clicking Login Button ...");

    IHTMLElement userPanel = doc.getElementById("u");

    IHTMLElementCollection HyperLinks = ((IHTMLElement2)userPanel).getElementsByTagName("a");

    IHTMLElement login = (IHTMLElement)HyperLinks.item(null, 0);

    login.click();

    首先我们得到了那个id为u的div,命名为userPanel。这一步和上面没啥区别。

    下面一个语句我们得到了userPanel的控件的所有tag为a的控件,也就是所有的超级链接。这里有一个小小的需要注意的地方,我们看到这个语句吧IHTMLElement对象强制类型转换成了IHTMLElement2,很有意思,为啥会这样呢?其实IHTMLElement有4个这样的兄弟,他们之间的方法不同,可以互相转换,我们想要的getElementsByTagName在IHTMLElement2下面,所以我们就强制类型转换到IHTMLElement2。这个方法返回一个IHTMLCollection。我们用HyperLinks来储存这个引用。

    因为userPanel的子控件只有登录超级链接这一个,所以我们直接使用index为0来取道这个对象就好了。IHTMLElementCollection里面的item方法详见msdn,我们只需要把第二个index设置为0,就可以取到第一个子对象。

    上次我们讲到了如何控制Web控件,有了上次的基础,我们这一次的东西就会比较简单:如何验证Web控。

    我们知道我们测试的目的就是判断被测产品是不是符合要求,如果是手动的测试,就是点到我们要判断的地方,然后用眼睛去判断出现的东西是不是我们想要的。

    而自动化就稍微复杂一点。我们需要解决两大问题:一个是操纵电脑去点击,另一个就是去检查是不是我们想要的结果。我们前面的文章可以解决操纵浏览器进行浏览,而接下来我们讲的就是如何判断是否正确了。

    不考虑性能测试的话,检查点无非有这么几个:

    * 内容是否正确

    * 样式是否正确

    下面我们以实际代码来讲解如何判断。

    首先判断一下样式,我们接着上次的代码,判断一下百度首页的文本框的大小是不是我们想要的(这个代码接着上次的得到keyword控件之后,Submit之前):

    //验证

    if (keyword.getAttribute("size", 0).ToString().Equals("36"))

    Console.WriteLine("Validation Passed! Size is Correct");

    else

    Console.WriteLine("Validation Failed! Size is wrong");

    我们可以看到IHTMLElement有getAttribute方法,这个方法可以得到一个Element里面的Attribute,比如value,type,以及css样式之类的,都可以用这个方法得到,见msdn对这个方法的更详细的讲解。

    我们用下面的代码对百度的搜索结果的内容和标题进行判断:

    //验证

    if(string.Equals(doc.title.Trim(),"百度搜索_colblog.net"))

    Console.WriteLine("Validation Passed! Title is Corrected");

    else

    Console.WriteLine("Validation Failed! Title is wrong");

    if (doc.body.innerText.Contains("生生不息"))

    Console.WriteLine("Validation Passed! Body contains your string");

    else

    Console.WriteLine("Validation Failed! Body do not contain");

    IE的标题就直接用HtmlDocument的title属性就好,而判断字符就是用到了IHTMLElement的innerText属性,这个属性是我们很常用的属性之一,他会将该Element中显示在IE的字符串返回给我们,另一个相对应的属性就是InnerHtml属性,这个属性会把这个 Element里的所有html代码返回。

    比如说一个简单的Dropdownlist,用InnerText就会返回这个List里面每一项的text,而使用InnerHtml就会返回这个list里面的html代码

    在这里我们使用innerText来判断是否有我们想要的文字在里面。

    NoticeNotice

    注意:innerText和innerHtml属性,是IHTMLELement的属性,所以我们得到的每一个IHTMLElement都可以拿到这样的属性,并不是只有body才可以。这样我们以后就可以用前面的知识得到想要的IHTMLElement元素,然后再使用InnerHtml和 InnerText来判断内容。

    除了这两个,还有outerHtml和outerText可以使用。

    这次的内容比较简单。下一篇将会提到如何判断IE是否完成了页面读取的问题。

    上面的几次课程中,我们介绍了如何打开浏览器,如何获取每个web控件的信息,并且控制并验证他们。

    从上面的文章中,我相信大家已经可以写出简单的测试程序了。但是还有一个很重要的问题没有解决:如何判断浏览器是否加载完成?

    前面的文章我们没有对浏览器的加载进行判断,而只是简简单单的等一段时间,这不是一个很好的解决方法,一方面浪费了时间,另一方面,我们也无法知道应该等多久,导致我们的测试程序不够稳定。

    接下来我们假设被测网页没有Ajax和框架,以这种情况来分析如何判断网页加载完毕。

    现在比较常用判断是否加载的方法有三种:

    1. 不停判断IE的状态,如果没有准备好就等待。

    2. 实现IE的DocumentComplete事件,标志完成。

    3. 不停去查找页面有没有我们想要控件,没有就等待。

    第一种方法:不停判断IE的状态,我们要判断IE的哪些状态呢?

    一方面,我们需要判断IE的Busy状态,看IE是不是在忙着解析东西,另一方面判断IE的ReadyState状态,看html文档是不是被完全加载进来

    while (ie.Busy || ie.ReadyState != tagREADYSTATE.READYSTATE_COMPLETE)

    {

    Thread.Sleep(100);

    }

    用如上的代码就可以等待IE到完成。

    这里只是简简单单的Demo,所以用了很简单的预计进行判断,我们假设我们的网页没有Ajax,也不会出现Load的死锁,真正的实际工作要比这个复杂一些,比如要定一个Time out,如果除了Timeout的范围,就强行终止,以防止测试过程中的死锁。

    而如何判断Ajax是否被加载完,不是我们这个系列的讨论范围,请关注以后的其他系列文章。

    这种方法是我比较推荐的一种方法,虽然《.net软件测试自动化之道》推荐的是第二种方法,不过我经过实际的测试,推荐第一种方法。这个方法可以比较好的处理Navigate、Submit等情况,也是WatiN使用的方法(WatiN的用法要复杂很多,考虑到了Frame等其他情况)第二种方法:通过绑定DocumentComplete,用AutoResetEvent来等待。

    InternetExplorer给我们提供了DocumentComplete事件,会在IE被Load之后被调用,我们可以使用这个来等待。等待方法就是使用System.Threading.AutoResetEvent对象来。

    所以我们需要做的是:

    1. 声明一个AutoResetEvent对象的实例,因为要在两个方法直接调用,所以需要放到类的成员变量。

    2. 在InternatExplorer被获取之后,绑定DocumentComplete事件。

    3. 在DocumentComplete事件中,调用AutoResetEvent.set()方法。

    4. 在等待页面加载的时候调用AutoResetEvent.WaitOne()方法

    展开全文
  • WebUI自动化测试框架

    2019-08-07 23:57:21
    本项目是一个基于Selenium的Web自动测试框架,通过该框架可以简化测试人员的学习难度,只要编写少量的Java代码即可,大多数的工作都是编写页面元素的描述文件以及对应的数据源。
  • github地址: https://github.com/wuranxu/webTest 基于Python的webUI自动化测试框架,支持多平台~带有自动下载chrome驱动功能
  • Web UI自动化测试框架

    千次阅读 2019-01-23 15:09:32
    18年写了一个关于web的ui自动化测试框架,基于python+Selenium framwork来做的UI操作,验证。做了一个ppt在团队做了培训。这里把这套小框架记录一下,也算是一个小总结。 1.我们使用一个config 文件来配置要运行...
  • 分层自动化:["分层设计思想","分层设计实战","分层case编写","流程调节"] Unittest与PO结合:["Unittest的使用","assert断言","HTMLTestRunner","如何批量管理case","失败截图处理","项目结合"] 数据驱动的使用:...
  • Web自动化常用的框架

    千次阅读 2019-04-27 20:50:49
    一、Web自动化常用的框架(主流测试-工具) ---QTP(收费):商业化的功能测试工具,收费,支持Web,桌面自动化 ----Selenium(开源):是开源的Web自动化工具,免费,主要做功能测试 ----Jmeter(开源,Web,...
  • Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefox的...
  • Selenium+TestNG 框架WEB自动化源码

    热门讨论 2009-06-19 16:12:33
    Selenium+TestNG 框架WEB自动化源码 Selenium+TestNG 框架WEB自动化源码
  • 完整的框架源码下载...一、Python+unittest+requests+HTMLTestRunner 完整的接口自动化测试框架搭建_00——框架结构简解 首先配置开发环境,下载安装Python并...
  • 作者:cryanimal QQ:164166060web自动化简介web自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的。其一般过程如下图所示: web自动化常用工具...
  • pyhton3+selenium的web页面自动化测试框架

    万次阅读 多人点赞 2019-02-19 19:49:02
    web自动化测试框架 pyhton3+selenium3+unittest+HTMLTestRunner 源码地址:https://github.com/linyuli861/Automated-Test.git 环境部署: python3+Selenium+unittest+HTMLTestRunner+pageObject Web自动化测试...
  • 当然robot framework也是一样,结合了selenium,需要安装:pip install selenium2library,习惯了编码写WEB自动化,robot framework基于关键字自动化的工具也还算可以,让测试变得更简单就。 正文: 1.元素...
  • 基于Sahi和Twist搭建的Web自动化测试框架 相信很多做Web自动化测试的读者都用过Selenium作为录制回放的工具,这里笔者将介绍另一个录制回放的工具Sahi, 以及如何使用Sahi和Twist快速搭建一套简单易用的Web自动化...
  • 在做web项目时,通常需要开发一些自动化用例,...在开发web自动化用例代码时,目前大多采用主流的selenium测试框架,selenium框架中的webdriver驱动浏览器模拟人的行为对页面进行操作,开发过程主要可以拆分为以下...
  • Web自动化测试框架【1】-- 简介

    千次阅读 2008-03-06 14:05:00
    在进行Web App的测试时,难免要做一些基本的测试,如UI的...什么Web自动化测试框架呢,简单的说他就是一个类库,里面封装了基于IE的一些常规操作,以便测试人员可以很快的通过测试框架来编写出测试代码,或者在Web
  • 在学会使用unittest后,实际上UI自动化的基础骨架已经搭建起来了,剩下的就是利于这套框架,增添一些我们需要的功能,目前看来,我们已经可以使用此框架来批量运行用例,欠缺的是整体的思路以及一些其他功能细节,...
  • WEB UI自动化框架设计

    千次阅读 2018-11-05 13:30:35
    框架是由selenium+testng+java+maven编写的数据驱动框架,对于用例的开放设计性比较强,分离了页面元素、页面元素操作、用例和检查点,也就是说,每个页面的元素、操作、检查点单独封装了,之后在用例中用到什么...
  • python搭建WEB自动化框架

    千次阅读 2018-08-21 11:22:52
     2 工具selenium + 单元测试框架 unittest  3 编译器: IDE/pycharm 结构设计  文件夹控制  case: 用例管理  bin: 可执行文件  com: 自定义公共代码  config: 配置文件(环境/数据)  image:...
  • 浅谈基于Selenium的Web自动化测试框架

    千次阅读 2015-11-16 16:54:34
    随着云概念的日益清晰,越来越多的企业也已经摆脱了传统的C/S架构的应用框架而转投云计算的怀抱,Web已经成为我们生活和工作的重心。  有别于传统的桌面应用开发,Web应用因为其迭代周期短,需求变化快特殊性质...
  • 基于webdriver的web UI自动化测试框架(系统架构+测试脚本应用架构) 自动化测试系统及应用架构
  • Watir - Ruby的开源Web自动化测试框架

    千次阅读 2006-08-27 14:11:00
    陈雷 http://jackei.cnblogs.com/ 2006-03-27Watir 是一个使用 Ruby 实现的开源Web 自动化测试框架,相对于那些庞大的商业工具来说,它很小巧,也很灵活,提供的功能也足够用。最近抽时间试用了一下,感觉还不错,...
  • 几种常用的UI自动化测试框架比较

    万次阅读 2019-03-28 16:41:38
    常用的UI自动化框架包括:webdriver、RobotFramework、selenium插件、QTP,我们将从多个维度对测试框架进行比较,以便我们结合业务的实际情况选择合适的框架,如下表所示: 在之前的文章中,我们对robotframework...
  • 通用UI自动化测试框架设计(web端)

    万次阅读 2019-03-10 12:27:53
    我就在考虑,为什么UI自动化框架就不能通用在不同的系统呢?然后针对这个,设计了现在的UI自动化测试框架,实现了简单的通用,每次只需要维护用例就行了,维护成本降低。 大家都知道,基于selenium函数,对页面...
  • 说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :... 目录 七丶行为驱动的介绍 八丶日志模块的使用 ...什么是行为驱动?也就是BDD...
  • 说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! ... 目录 四丶Unittest介绍及项目实战中的运用 五丶数据驱动的介绍及使用 ...六丶关键字模型的介绍及运用 ...四丶Unittest介绍及项目实战中的运用 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 346,783
精华内容 138,713
关键字:

web自动化什么框架比较好