1 Star 0 Fork 6

mes / RoWarlock

forked from 紫竹蜚凝 / RoWarlock 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

RoWarlock User Guide

RoWarlock is an Automation tool base on UI, Using Selenium(Web), MSUIAutomation(Client), Appium(Mobile) as the event-driven.

RoWarlock RoWarlock Test Scripts Tool

1. Construction

RoWarlock has two constructions, "RoWarlock" and "RoWarlock Test Scripts Tool". The "RoWarlock" is the script execution tool, and other one is the test scripts tool. Because RoWarlock use some WindowsForms APIs and developed by Visual Studio. Now, RoWarlock only support Microsoft Windows OS.

1.1 Update version Infomation

  • 2017-03-28: Complete the development of EAP version
  • 2017-04-01: Complete the test of EAP version
  • 2017-05-24: Complete the development of V1.1 version. Support command line and GUI.
  • 2017-11-07: Complete the development of V1.5 version. Refactoring the entire project.Delete command line and only saved GUI.

1.2 Environment configuration

  • Installed .Net 4.5 On windows OS(better than Windows XP)
  • please copy this text "C:\Browser" on your Environment Path Like this
  • Please update Chrome to lastest version. RoWarlock only support Chrome v60-62

2. How to use the tool

If you have created and writed test scripts, just open RoWarlock and select test scripts documents, click "run", the tool will execute the selected scripts on automatic. Please see the image. 1.select scripts dolder

(1) Select scripts folder

  1. click button and show select dialog.
  2. select one folder that include "ros","roi","roc" files's folder.
  3. click "ok" button and exit dialog.

2.select run scripts

(2) Select run scripts

  1. on the listview, you can select that you want to run scirtps.
  2. click run button after selected done.
  3. wait the result.

On the tool's UI, you can see the details for every test script step, the pass step using Green backcolor, and the failed step is Red.

3. Result and log files

RoWarlock support two types log, The one is Web action log, the other one is the tools log

3.1 Web action log

Web action log will record all web steps result. just like this:

    操作时间:2017-11-13 15:51:13
    操作结果:PASS
    Case名称:BeforeLogin   行号:21   操作名称:WaitUntil.PageIsLoaded   使用控件:未使用  执行结果:成功
    其他信息:当前页面已载入完成

The fist line is time record. The second line is test result. The third line will record case name, use script step code line number, control id. the fourth line is other infomation, if this step will failed, it will recorded on the fourth line. If this step encounters an exception, it will record more infomation that include exception message, StackTrace and so on...

3.2 Tools log

Tools log will record RoWarlock tools. if tool encounters an exception, it will record it, also ,it will record some debug infomations for developer.

2017-11-13 14:51:21 INFO 脚本执行工具正式开始工作...
2017-11-13 15:50:29 INFO 脚本执行工具准备开始执行脚本...
2017-11-13 15:50:29 INFO 脚本执行工具执行GuiCore方法...
2017-11-13 15:50:29 INFO 脚本执行工具载入MacroUnit.roc配置文件...
2017-11-13 15:50:29 INFO 脚本执行工具载入PropertiesUnit.roc配置文件...
2017-11-13 15:50:29 INFO 当前参数字典共计 40 个数据...
2017-11-13 15:50:29 INFO 当前宏字典共计 7 个数据...
2017-11-13 15:50:29 INFO ElementEntrance中当前处理的路径为:
2017-11-13 15:50:29 INFO ElementEntrance中当前处理的路径为:
2017-11-13 15:50:29 INFO ElementEntrance中当前处理的路径为:
2017-11-13 15:50:29 INFO ElementEntrance中当前处理的路径为:
2017-11-13 15:50:29 INFO 当前元素字典共计 162 个数据...
2017-11-13 15:50:32 INFO WEB测试日志将写入WebAction_Dev.log中,具体详情,请查看WebAction_Dev.log日志
2017-11-13 15:50:33 DEBUG 当前宏操作BeforeLogin提取步骤数量为:8
2017-11-13 15:50:33 INFO 准备开启ChromeDriver服务,浏览器
2017-11-13 15:50:34 INFO 准备替换的参数为:LocalUrl, 替换值为:http://127.0.0.1:8090/
2017-11-13 15:50:34 DEBUG 当前的CurrentWindowHandle是:CDwindow-a516c8ab-171b-403b-a7f9-74467194e3e8
2017-11-13 15:50:34 INFO 准备替换的参数为:LoginName, 替换值为:admin
2017-11-13 15:50:35 INFO 准备替换的参数为:Password, 替换值为:admin
2017-11-13 15:50:39 DEBUG 当前宏操作CreateScale_First提取步骤数量为:8
2017-11-13 15:50:40 INFO 准备替换的参数为:IpAdd_1, 替换值为:172.30.218.1
2017-11-13 15:50:47 DEBUG 当前宏操作CreateScale_Second提取步骤数量为:8
2017-11-13 15:50:47 INFO 准备替换的参数为:IpAdd_2, 替换值为:172.30.18.2
2017-11-13 15:50:52 DEBUG 当前宏操作CreateScale_Unuse提取步骤数量为:7
2017-11-13 15:50:52 INFO 准备替换的参数为:IpAdd_3, 替换值为:172.30.218.3
2017-11-13 15:50:57 DEBUG 当前宏操作DeleteAllScale提取步骤数量为:5
2017-11-13 15:51:03 INFO 准备关闭浏览器、服务和释放资源

4 Write test scripts

If the tester need write one tet script, he or she need use "RoWarlock Test Scripts Tool". It's a visual studio solution. if you want open it, you need a visual studio or better . Somettimes, you can also use visual studio code to open it, but it not have Intelligent.

Ros file is the script logic file. every step is an actual action on the web. Roc file is the config file, all properties and all macros on this file. also, it will inculde others. Roi file is the element-set file, it inculdes a lots element for one web page.

Open solution by visual studio, and you can see this layered

  • Sample --- three files samples
    • Json --- tool will support json language on the 2.0 version.
    • Ro --- version 1.5 uesed.inculde three files about "ros", "roc", "roi"
  • Schemas --- define XML format
    • 脚本 --- define XML format for "ros", "roc", "roi" scripts
    • other files --- define XML format for others

4.1 Ros file (Ro-scripts file)

  1. create xml file and change suffix name to the "ros".
  2. copy this text
<?xml version="1.0" encoding="utf-8"?>

<ros:TestDefinition xmlns:ros="http://tempuri.org/RoFramework.xsd"
                    xmlns:web="http://tempuri.org/RoWebAutomation.xsd"
                    xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ros:Annotation>
    <ros:Description>
    
    (Don't delete this text)
      版权、著作权归属冯涛所有
      基于Apache-2.0开源协议,授权给其他人员使用。如需修改Ros文件对应框架文件,需在被修改文件中,对本著作权人进行描述和引申
      Author: 冯涛
      E-mail: fengtao.1314520@163.com
      Skype/MSN: fengtao.1314520@hotmail.com
      Gmail: fengtao.1314520@gmail.com
  
    </ros:Description>
    <ros:Created ros:Author="nate" ros:Date="2017-08-16" />
    <ros:LastUpdated ros:Author="nate" ros:Date="2017-08-16" />
  </ros:Annotation>


  <ros:TestConfig>
  
    <ros:Properties>
      <ros:Property ros:ID="Username">
        <ros:Value>admin</ros:Value>
        <ros:Description></ros:Description>
      </ros:Property>
    </ros:Properties>

    <ros:Imports>
      <ros:ConfigurationFile ros:ID="A" ros:Type="RoWeb">
        <ros:Path>${PropertyID 1}\${PropertyID 2}\filename.roi</ros:Path>
      </ros:ConfigurationFile>
      <ros:ConfigurationFile ros:ID="C" ros:Type="RoMobile">
        <ros:Path>filename.roi</ros:Path>
      </ros:ConfigurationFile>
      <ros:ConfigurationFile ros:ID="C" ros:Type="RoMobile">
        <ros:Path>foldername/filename.roi</ros:Path>
      </ros:ConfigurationFile>
    </ros:Imports>

  </ros:TestConfig>


  <ros:StartApp>
    <ros:AppInfo ros:AppName="Chrome">
      <ros:ExecuePath>C://Browser</ros:ExecuePath>
      <ros:BaseWindowsBits ros:Bits="32Bits" />
      <ros:Version></ros:Version>
      <ros:Parameters>
        <ros:Parameter />
      </ros:Parameters>
    </ros:AppInfo>
  </ros:StartApp>

  
  <ros:Tests>
    <ros:TestCase ros:ID="WebControl">
      <ros:Annotation>
        <ros:Description>
          对本测试用例进行描述
        </ros:Description>
        <ros:Created ros:Author="fengtao" ros:Date="2016-01-22" />
        <ros:LastUpdated ros:Author="fengtao" ros:Date="2016-01-22" />
      </ros:Annotation>
      <ros:TestSteps>
      </ros:TestSteps>
    </ros:TestCase>
  </ros:Tests>


  <ros:CloseApp ros:Keep="true" />


  <ros:LogFunction>
    <ros:LogFilePath></ros:LogFilePath>
  </ros:LogFunction>


</ros:TestDefinition>
  1. fill in the corresponding information

4.1.1 Single element node explanation

Explain the roles and uses of each node. Script file includes 7 nodes, and the "ros:TestDefinition" is root node, the starting and ending node of the "ros" script. other 6 nodes inclued on "ros:TestDefinition" node.

The Rowarlock scripts APIs file is here,RoWarlock APIs, you can download file and see it.

4.1.2 Annotation

Explain the role of the script and used test case like this:

<ros:Annotation>
    <ros:Description>
      版权、著作权归属冯涛所有
      基于Apache-2.0开源协议,授权给其他人员使用。如需修改Ros文件对应框架文件,需在被修改文件中,对本著作权人进行描述和引申
      Author: 冯涛
      E-mail: fengtao.1314520@163.com
      Skype/MSN: fengtao.1314520@hotmail.com
      Gmail: fengtao.1314520@gmail.com
    </ros:Description>
    <ros:Created ros:Author="nate" ros:Date="2017-08-16" />
    <ros:LastUpdated ros:Author="nate" ros:Date="2017-08-16" />
  </ros:Annotation>

You need modify the text between ros:Description, and there is the a standard user information,including user, Open-Source license, contact information and other useful information. After completed ros:Description,you also modify ros:Author and ros:Date. this text only support this type xxxx-xx-xx.

4.1.3 TestConfig

Set test properties and import "roi" files.

4.1.3.1 Property

On node ros:Properties, saved properties that script need used. you can create a considerable number of properties. One property need this type:

 <ros:Property ros:ID="">
        <ros:Value>admin</ros:Value>
        <ros:Description></ros:Description>
      </ros:Property>
    </ros:Properties>

you need modify ID's value for ros:ID, this ID is unique, then fill in the value on ros:Value and description of this property on ros:Description.

4.1.3.2 ConfigurationFile

On node ros:Imports, saved "roi" files path that this script used. One import need this type:

<ros:ConfigurationFile ros:ID="" ros:Type="RoWeb">
        <ros:Path></ros:Path>
      </ros:ConfigurationFile>

you need modify ID's value for ros:ID, this ID is unique, then fill in the value on ros:Path. ros:Path support parameterization,like this:${PropertyID 1}\${PropertyID 2}\filename.roi. in fact, ros:Path support three wording. (1) only roi file name <ros:Path>filename.roi</ros:Path>. (2) foldername and file name <ros:Path>foldername/filename.roi</ros:Path>.

4.1.4 StartApp

set browser infomation, include browser name, unzip folder path and others. like this type:

 <ros:AppInfo ros:AppName="Chrome">
      <ros:ExecuePath>C://Browser</ros:ExecuePath>
      <ros:BaseWindowsBits ros:Bits="32Bits" />
      <ros:Version></ros:Version>
      <ros:Parameters>
        <ros:Parameter />
      </ros:Parameters>
    </ros:AppInfo>

ros:AppName only supports three formats, "Chrome","Firefox" and "InternetExplorer". and ros:ExecuePath is the unzip file path, ros:Bits only supoort "32Bits".

4.1.5 Tests

Contains all the test cases, and each test case corresponds to a manual test case, the test case like this type:

<ros:TestCase ros:ID="WebControl">
      <ros:Annotation>
        <ros:Description>
        </ros:Description>
        <ros:Created ros:Author="fengtao" ros:Date="2016-01-22" />
        <ros:LastUpdated ros:Author="fengtao" ros:Date="2016-01-22" />
      </ros:Annotation>
      <ros:TestSteps>
      </ros:TestSteps>
    </ros:TestCase>

you need modify ID's value for ros:ID, this ID is unique, then fill in the value on ros:Annotation, this node same as Annotation. ros:TestSteps is the test steps recorder. every step is an actual action on the web. If you don't know how to develop the Web step, please see this document, Web Steps APIs

4.1.6 CloseApp

If you want delete browser drivers ,you can use ros:Keep="false", and ros:Keep="true" that if you keep the test environment.

4.1.7 LogFunction

This is the last scripts node. In the end of testing, RoWarlock needs save log file. this node's InnerText allow of empty. The logs zip package will saved on Desktop. if you modify value, the logs zip package will saved in yourself's folder path.

4.2 Roi file(Ro-Elements file)

  1. create xml file and change suffix name to the "roi".
  2. copy this text
<?xml version="1.0" encoding="utf-8"?>

<roi:roi xmlns:roi="http://tempuri.org/RoiFile.xsd"
         xmlns:ros="http://tempuri.org/RoFramework.xsd">
<!--******************************************************************************
    TODO 2017-06-05更新roi文件中控件的命名规则
    By:冯涛(Nate Ford)
    
    1.控件名称需要明确表达控件的作用,具有简单明了的表现形式
    2.控件名称以'驼峰形式表达',首字母为大写字母,允许简写形式,但不允许使用拼音。正确表达例如:FindElement
    3.控件名称需要跟随控件形式,以"_"下划线跟随控件形式,且放置于表形式的最后,正确表达例如:FindElement_Btn
    4.控件名称中附属的限定值跟随在名称后,以"_"+"限定值"的形式表现,正确表达例如:FindElement_Left_Btn、FindElement_1_Btn等
    
    控件形式为:
    按钮/Button ——> _Btn
    显示字符/Label ——> _Lbl
    文本框/Text ——> _Text
    复选项/RadioBoxButton ——> _Rbn
    勾选项/CheckBoxButton ——> _Cbn
    列表/Table ——> _Tbl
    单行或单列数据/List  ——> _Lst
    
    Web特有的:
    IFrame ——> _Frm
    ******************************************************************************-->
  <roi:annotation>
    <ros:Description>
      版权、著作权归属冯涛所有
      基于Apache-2.0开源协议,授权给其他人员使用。如需修改Roi文件对应框架文件,需在被修改文件中,对本著作权人进行描述和引申
      Author: 冯涛
      E-mail: fengtao.1314520@163.com
      Skype/MSN: fengtao.1314520@hotmail.com
      Gmail: fengtao.1314520@gmail.com

      对整个测试元素文件进行描述详情
    </ros:Description>
    <ros:Created ros:Author="nate" ros:Date="2017-08-16" />
    <ros:LastUpdated ros:Author="nate" ros:Date="2017-08-16" />
  </roi:annotation>

  <roi:meta>

    <!--元素的写法,单元素-->
    <roi:sigele roi:id="" roi:explain="单元素独立的元素,通过locator和value可以直接定位到本元素">
      <roi:valueinfo roi:locator="XPath" roi:index="1"></roi:valueinfo>
    </roi:sigele>

    <!--元素的写法,复合元素-->
    <roi:cpxele roi:explain="复合元素是同父元素的派生写法,复合元素的子元素都拥有自己的id,只共享使用locator和前缀value">
      <roi:valueinfo roi:locator="Class" roi:index=""></roi:valueinfo>
      <roi:complexs>
        <roi:cpxchild roi:id="" roi:childvalue="" roi:index="" />
      </roi:complexs>
    </roi:cpxele>

    <!--超集,文件逻辑结构-->
    <roi:superset roi:explain="超集,仅仅是文件逻辑结构">
      <roi:subset roi:explain="子集,仅仅是文件逻辑结构">
        <roi:sigele roi:id="" roi:explain="单元素">
          <roi:valueinfo roi:locator="XPath"></roi:valueinfo>
        </roi:sigele>
        
        <roi:cpxele roi:explain="复合元素">
          <roi:valueinfo roi:locator="Class" roi:index="" />
          <roi:complexs>
            <roi:cpxchild roi:id="" roi:childvalue="" roi:index="" />
          </roi:complexs>
        </roi:cpxele>
      </roi:subset>

      <roi:subset roi:explain="子集,仅仅是文件逻辑结构">
        <roi:sigele roi:id="" roi:explain="单元素">
          <roi:valueinfo roi:locator="XPath"></roi:valueinfo>
        </roi:sigele>
       
        <roi:cpxele roi:explain="复合元素">
          <roi:valueinfo roi:locator="Class" roi:index="" />
          <roi:complexs>
            <roi:cpxchild roi:id="" roi:childvalue="" roi:index="" />
          </roi:complexs>
        </roi:cpxele>
      </roi:subset>
    </roi:superset>


  </roi:meta>
</roi:roi>
  1. fill in the corresponding information

4.2.1 Element name rules

  • The name of the element(roi:id="") needs to be simple and clear, and contains the effect of this element.
  • The name of the element is expressed in the form of a hump. The first letter is uppercase, allowing abbreviations, but not the pinyin. like this type:roi:id="FindElement"
  • The element name needs additional control types or target,like this:roi:id="FindElement_Btn",roi:id="FindElement_Text"
  • If the name contains other restrictions, please add it to the middle of the name. lile this type roi:id="FindElement_Left_Btn

4.2.2 Control types rules

* Button ——> _Btn
* Label ——> _Lbl
* Text ——> _Text
* RadioBoxButton ——> _Rbn
* CheckBoxButton ——> _Cbn
* Table ——> _Tbl
* List  ——> _Lst
* IFrame ——> _Frm

4.2.3 sigele

This is a single element, the tpye is:

<roi:sigele roi:id="" roi:explain="单元素独立的元素,通过locator和value可以直接定位到本元素">
      <roi:valueinfo roi:locator="XPath" roi:index="1">//*span[@id='abc']</roi:valueinfo>
    </roi:sigele>

You need modify ID's value for roi:id, this id is unique. and roi:explain is is the explanation of this element. roi:locator is the query method of this element, RoWarlock support 6 method

  • id
  • name
  • class
  • css
  • link
  • XPath

If the number of elements is not unique, please add roi:index="1", the index value is the element serial number. like this: if you find this number of elements is 3 and you just use N0.2 element, the serial number is 2 (roi:index="2")

//*span[@id='abc'] is the XPath value, you need modift this value to your using element's value.

4.2.4 cpxele

You need modify ID's value for roi:id, this id is unique This is a complex elements list. this elements have a part of the same xpath value,Usually is the first half. like this: there is two different elements,the first is xpath=//*div[1]/span/span[@id='a']. the second is xpath=//*div[1]/span/span[@id='b'], a part of the same xpath value is xpath=//*div[1]/span, so cpxele is:

 <roi:cpxele>
      <roi:valueinfo roi:locator="XPath">//*div[1]/span</roi:valueinfo>
      <roi:complexs>
        <roi:cpxchild roi:id="A" roi:childvalue="span[@id='a']" />
        <roi:cpxchild roi:id="A" roi:childvalue="span[@id='b']" />
      </roi:complexs>
    </roi:cpxele>

roi:explain is is the explanation of this element.

4.2.5 superset & subset

superset and subset is the logical relationship between elements, superset allow contains subset, subset allow contains sigele and cpxele

<roi:superset>
      <roi:subset>
        <roi:sigele roi:id="">
          <roi:valueinfo roi:locator="XPath"></roi:valueinfo>
        </roi:sigele>       
        <roi:cpxele>
          <roi:valueinfo roi:locator="Class" roi:index="" />
          <roi:complexs>
            <roi:cpxchild roi:id="" roi:childvalue="" roi:index="" />
          </roi:complexs>
        </roi:cpxele>
      </roi:subset>
    </roi:superset>

4.2.6 How to use element on the ros file

When you create and complete the development of the roi file, plese rename this file and give this file a simple and clear name. Get this file path ConfigurationFile's in ros:Imports

<ros:ConfigurationFile ros:ID="" ros:Type="RoWeb">
        <ros:Path></ros:Path>
      </ros:ConfigurationFile>

ros:ID same as file name, when you want use a element on teststep, get this element roi:id and fill in web:RoWebElementID="", you don't know web:RoWebElementID="", plese see this document Web Steps APIs

4.3 Roc File(Ro-config file)

  1. create xml file and change suffix name to the "roc".
  2. copy this text
<?xml version="1.0" encoding="utf-8"?>

<roc:Config xmlns:roc="http://tempuri.org/RocFile.xsd"
            xmlns:ros="http://tempuri.org/RoFramework.xsd"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <!--配置文件描述-->
  <roc:Annotation>
    <ros:Description>
      版权、著作权归属冯涛所有
      基于Apache-2.0开源协议,授权给其他人员使用。如需修改Roc文件对应框架文件,需在被修改文件中,对本著作权人进行描述和引申
      Author: 冯涛
      E-mail: fengtao.1314520@163.com
      Skype/MSN: fengtao.1314520@hotmail.com
      Gmail: fengtao.1314520@gmail.com
      
      脚本配置文件,用以存放脚本中的各类可能用到的参数
    </ros:Description>
    <ros:Created ros:Author="fengtao" ros:Date="2017-08-15" />
    <ros:LastUpdated ros:Author="fengtao" ros:Date="2017-08-15" />
  </roc:Annotation>

  <!--测试模式-->
  <roc:TestMode roc:SelectMode="Defalut" roc:LoopNum="1"/>
  
  
  <!--设定参数-->
  <roc:Properties>
    <ros:Property ros:ID="参数Id">
      <ros:Value>参数值</ros:Value>
      <ros:Description>参数描述</ros:Description>
    </ros:Property>
  </roc:Properties>
  
  
  <!--测试宏-->
  <roc:Macros>
    <roc:Macro roc:ID="宏Id">
      <roc:MacroActivities>
        填入对应步骤
      </roc:MacroActivities>
    </roc:Macro>
  </roc:Macros>
  
</roc:Config>
  1. fill in the corresponding information

4.3.1 TestMode

Don't modify this node value,

4.3.2 Properties

Same as Properties on ros file,plese see Porperty

4.3.3 Macros

Different test cases may use completely consistent test steps, Macro saved this steps

 <roc:Macro roc:ID="宏Id">
      <roc:MacroActivities>
        填入对应步骤
      </roc:MacroActivities>
    </roc:Macro>
  </roc:Macros>

You need modify ID's value for roc:ID, this ID is unique Please fill in same steps on the roc:MacroActivities.

4.3.3.1 How to use Macros on the ros file

When you create and complete the development of the roc file, plese rename this file and give this file a simple and clear name. Reopen RoWarlock tool, and re-select folder path. when you want use a macro on teststep, get this macro roc:iID and fill in <ros:MacroReference ros:MacroID="" />, if you don't know ros:MacroReference ros:MacroID="", plese see this document Web Steps APIs

5 License

RoWarlock is licensed under Apache Licence V2.0 license.

6 Thanks

  • Selenium(Completed)
  • Appium(In development)
  • MS UIAutomation(In development)
  • Thanks DMSkin, the UI based DMSkin
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2017 紫竹蜚凝(包括但不限于 紫竹蜚凝、Nate、Nate Ford、冯涛、FengTao1314520、fengtao.1314520均指同一人) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

基于Selenium, Appium, MS UIAutomaiton的自动化测试工具,覆盖Web, Client(开发中), Mobile(开发中)三类测试对象,实现对UI层的功能性自动化测试。 展开 收起
C#
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C#
1
https://gitee.com/mes/RoWarlock.git
git@gitee.com:mes/RoWarlock.git
mes
RoWarlock
RoWarlock
master

搜索帮助