精华内容
下载资源
问答
  • 说明最新的selenium3 python3的开源优化使用配置yamls下的config的urlurl: https://testerhome.com/命令运行python runner.py或者修改start.test.bat中的路径后,直接点击运行结果展示日志目录文件夹:chrome_XXXXX...

    说明

    最新的selenium3 python3的开源优化

    使用

    配置yamls下的config的url

    url: https://testerhome.com/

    命令运行

    python runner.py

    或者修改start.test.bat中的路径后,直接点击运行

    结果展示

    日志目录

    文件夹:chrome_XXXXX,包含截图

    2018-04-29 23:28:09,357 - INFO - ---- test001_登录失败_div.container>ul>li:nth-child(2)_css_click_ ----

    2018-04-29 23:28:09,970 - INFO - ---- test001_登录失败_input-lg_class_name_send_keys_lose1 ----

    2018-04-29 23:28:10,066 - INFO - ---- test001_登录失败_user_password_id_send_keys_1231231232 ----

    2018-04-29 23:28:10,187 - INFO - ---- test001_登录失败_div.form-actions_css_click_ ----

    2018-04-29 23:28:10,784 - INFO - ---- test001_登录失败_div.alert-warning_css_ _ ----

    2018-04-29 23:28:10,785 - INFO - [CheckPoint_1]: testALoginFail_ : OK

    2018-04-29 23:28:36,116 - INFO - ---- test001_登录_div.container>ul>li:nth-child(2)_css_click_ ----

    2018-04-29 23:29:41,881 - INFO - ---- test001_登录_input-lg_class_name_send_keys_lose1 ----

    2018-04-29 23:30:16,331 - INFO - ---- test001_登录_user_password_id_send_keys_1231231232 ----

    2018-04-29 23:30:16,433 - INFO - ---- test001_登录_div.form-actions_css_click_ ----

    2018-04-29 23:31:02,425 - INFO - [CheckPoint_2]: testBLogin_==请检查dropdown-avatar==: NG

    实时日志

    testALoginFail (TestCase.HomeTest.HomeTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==

    ==操作步骤:input-lg_class_name_send_keys_lose1==

    ==操作步骤:user_password_id_send_keys_1231231232==

    ==操作步骤:div.form-actions_css_click_ ==

    ==操作步骤:div.alert-warning_css_ _ ==

    ==用例_登录失败检查点成功==

    ok

    testBLogin (TestCase.HomeTest.HomeTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==

    ==操作步骤:input-lg_class_name_send_keys_lose==

    ==操作步骤:user_password_id_send_keys_XXXXX==

    ==操作步骤:div.form-actions_css_click_ ==

    ==操作步骤:dropdown-avatar_class_name_click_ ==

    ==操作步骤://ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]_xpath_ _ ==

    ==用例_登录检查点成功==

    [{'caseName': 'testALoginFail', 'step': '点击登录\n输入用户名\n输入密码\n点击登录\n', 'info': '打开testerhome', 'title': '登录失败', 'checkStep': '错误的密码登录不成功\n', 'id': 'test001', 'msg': '', 'name': 'chrome', 'result': '通过'}]

    ok

    testHotTopic (TestCase.MyTest.MyTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==

    ==操作步骤:input-lg_class_name_send_keys_lose==

    ==操作步骤:user_password_id_send_keys_XXXX==

    ==操作步骤:div.form-actions_css_click_ ==

    ==操作步骤:dropdown-avatar_class_name_click_ ==

    ==操作步骤:dropdown-avatar_class_name_click_ ==

    ==操作步骤://ul[@class='dropdown-menu']/li/a_xpath_click_ ==

    ==操作步骤://ul[@class="list-group"]/li[1]/div/a[2]_xpath_get_text_ ==

    ==操作步骤:ul.list-group > li:nth-child(1) > div.title > a:nth-child(2)_css_click_ ==

    ==操作步骤:/html/head/title_xpath_get_text_ ==

    ==用例_热门话题检查点成功==

    测试报告

    代码简要分析

    yml测试用例

    testinfo:

    - id: test001

    title: 登录

    info: 打开testerhome

    testcase:

    - element_info: div.container>ul>li:nth-child(2)

    find_type: css

    operate_type: click

    info: 点击登录

    - element_info: input-lg

    find_type: class_name

    operate_type: send_keys

    msg: lose

    info: 输入用户名

    - element_info: user_password

    find_type: id

    operate_type: send_keys

    msg: XXXXX

    info: 输入密码

    - element_info: div.form-actions

    find_type: css

    operate_type: click

    info: 点击登录

    - element_info: dropdown-avatar

    find_type: class_name

    operate_type: click

    info: 点击图像

    check:

    - element_info: //ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]

    find_type: xpath

    check: default_check(默认可以不传,就是简单的查找页面元素)

    info: 查找用户名成功

    关于check下面可以填检查点的类型:

    CONTRARY = “contrary” # 相反检查点,表示如果检查元素存在就说明失败,如删除后,此元素依然存在

    CONTRARY_GETVAL = “contrary_getval” # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败

    DEFAULT_CHECK = “default_check” # 默认检查点,就是查找页面元素

    COMPARE = “compare” # 历史数据和实际数据对比

    某个用例的page层

    class LoginPage:

    def __init__(self, kwargs):

    _init = {"driver": kwargs["driver"], "test_msg": getYam(kwargs["path"]),

    "logTest": kwargs["logTest"], "caseName": kwargs["caseName"]}

    self.page = Pages.PagesObjects(_init)

    def operate(self): # 操作步骤

    self.page.operate()

    def checkPoint(self): # 检查点

    self.page.checkPoint()

    pages再次封装了一层,主要使用了 setupclass+ self.driver.get重定位的方式

    避免用例依赖,并不会每个用例重新启动一个session,重连机制也是这样实现的(后续填坑)

    if kwargs.get("launch", "0") == "0": # 若为空, 刷新页面

    self.driver.get(self.driver.current_url)

    testcase层调用page层

    cclass HomeTest(ParametrizedTestCase):

    def testALoginFail(self):

    app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/LoginFail.yaml"),

    "caseName": sys._getframe().f_code.co_name}

    page = LoginFailPage(app)

    page.operate()

    page.checkPoint()

    def testBLogin(self):

    app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/Login.yaml"),

    "caseName": sys._getframe().f_code.co_name}

    page = LoginPage(app)

    page.operate()

    page.checkPoint()

    封装自己的关键字

    在BaseOperate中定义自己的关键字

    def operate_by(self, operate, testInfo, logTest):

    ...........

    elements = {

    be.CLICK: lambda: self.click(operate),

    be.GET_VALUE: lambda: self.get_value(operate),

    be.GET_TEXT: lambda: self.get_text(operate),

    be.SEND_KEYS: lambda: self.send_keys(operate),

    be.MOVE_TO_ELEMENT: lambda: self.move_to_element(operate)

    }

    在用例中yaml传入自己的关键字即可,看看下面的operate_type中的鼠标悬停

    testcase:

    - element_info: cate_item_108698

    find_type: id

    operate_type: move_to_element

    info: 鼠标悬停到.net分类上

    后续

    引入重连机制

    docker grid

    作者:望月成三人

    展开全文
  • 说明最新的selenium3 python3的开源优化使用配置yamls下的config的urlurl: https://testerhome.com/命令运行python runner.py或者修改start.test.bat中的路径后,直接点击运行结果展示日志目录文件夹:chrome_XXXXX...

    说明

    最新的selenium3 python3的开源优化

    使用

    配置yamls下的config的url

    url: https://testerhome.com/

    命令运行

    python runner.py

    或者修改start.test.bat中的路径后,直接点击运行

    结果展示

    日志目录

    文件夹:chrome_XXXXX,包含截图

    2018-04-29 23:28:09,357 - INFO - ---- test001_登录失败_div.container>ul>li:nth-child(2)_css_click_ ----

    2018-04-29 23:28:09,970 - INFO - ---- test001_登录失败_input-lg_class_name_send_keys_lose1 ----

    2018-04-29 23:28:10,066 - INFO - ---- test001_登录失败_user_password_id_send_keys_1231231232 ----

    2018-04-29 23:28:10,187 - INFO - ---- test001_登录失败_div.form-actions_css_click_ ----

    2018-04-29 23:28:10,784 - INFO - ---- test001_登录失败_div.alert-warning_css_ _ ----

    2018-04-29 23:28:10,785 - INFO - [CheckPoint_1]: testALoginFail_ : OK

    2018-04-29 23:28:36,116 - INFO - ---- test001_登录_div.container>ul>li:nth-child(2)_css_click_ ----

    2018-04-29 23:29:41,881 - INFO - ---- test001_登录_input-lg_class_name_send_keys_lose1 ----

    2018-04-29 23:30:16,331 - INFO - ---- test001_登录_user_password_id_send_keys_1231231232 ----

    2018-04-29 23:30:16,433 - INFO - ---- test001_登录_div.form-actions_css_click_ ----

    2018-04-29 23:31:02,425 - INFO - [CheckPoint_2]: testBLogin_==请检查dropdown-avatar==: NG

    实时日志

    testALoginFail (TestCase.HomeTest.HomeTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==

    ==操作步骤:input-lg_class_name_send_keys_lose1==

    ==操作步骤:user_password_id_send_keys_1231231232==

    ==操作步骤:div.form-actions_css_click_ ==

    ==操作步骤:div.alert-warning_css_ _ ==

    ==用例_登录失败检查点成功==

    ok

    testBLogin (TestCase.HomeTest.HomeTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==

    ==操作步骤:input-lg_class_name_send_keys_lose==

    ==操作步骤:user_password_id_send_keys_XXXXX==

    ==操作步骤:div.form-actions_css_click_ ==

    ==操作步骤:dropdown-avatar_class_name_click_ ==

    ==操作步骤://ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]_xpath_ _ ==

    ==用例_登录检查点成功==

    [{'caseName': 'testALoginFail', 'step': '点击登录\n输入用户名\n输入密码\n点击登录\n', 'info': '打开testerhome', 'title': '登录失败', 'checkStep': '错误的密码登录不成功\n', 'id': 'test001', 'msg': '', 'name': 'chrome', 'result': '通过'}]

    ok

    testHotTopic (TestCase.MyTest.MyTest) ... ==操作步骤:div.container>ul>li:nth-child(2)_css_click_ ==

    ==操作步骤:input-lg_class_name_send_keys_lose==

    ==操作步骤:user_password_id_send_keys_XXXX==

    ==操作步骤:div.form-actions_css_click_ ==

    ==操作步骤:dropdown-avatar_class_name_click_ ==

    ==操作步骤:dropdown-avatar_class_name_click_ ==

    ==操作步骤://ul[@class='dropdown-menu']/li/a_xpath_click_ ==

    ==操作步骤://ul[@class="list-group"]/li[1]/div/a[2]_xpath_get_text_ ==

    ==操作步骤:ul.list-group > li:nth-child(1) > div.title > a:nth-child(2)_css_click_ ==

    ==操作步骤:/html/head/title_xpath_get_text_ ==

    ==用例_热门话题检查点成功==

    测试报告

    代码简要分析

    yml测试用例

    testinfo:

    - id: test001

    title: 登录

    info: 打开testerhome

    testcase:

    - element_info: div.container>ul>li:nth-child(2)

    find_type: css

    operate_type: click

    info: 点击登录

    - element_info: input-lg

    find_type: class_name

    operate_type: send_keys

    msg: lose

    info: 输入用户名

    - element_info: user_password

    find_type: id

    operate_type: send_keys

    msg: XXXXX

    info: 输入密码

    - element_info: div.form-actions

    find_type: css

    operate_type: click

    info: 点击登录

    - element_info: dropdown-avatar

    find_type: class_name

    operate_type: click

    info: 点击图像

    check:

    - element_info: //ul[@class='dropdown-menu']/li/a[contains(text(),'lose')]

    find_type: xpath

    check: default_check(默认可以不传,就是简单的查找页面元素)

    info: 查找用户名成功

    关于check下面可以填检查点的类型:

    CONTRARY = "contrary" # 相反检查点,表示如果检查元素存在就说明失败,如删除后,此元素依然存在

    CONTRARY_GETVAL = "contrary_getval" # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败

    DEFAULT_CHECK = "default_check" # 默认检查点,就是查找页面元素

    COMPARE = "compare" # 历史数据和实际数据对比

    某个用例的page层

    class LoginPage:

    def __init__(self, kwargs):

    _init = {"driver": kwargs["driver"], "test_msg": getYam(kwargs["path"]),

    "logTest": kwargs["logTest"], "caseName": kwargs["caseName"]}

    self.page = Pages.PagesObjects(_init)

    def operate(self): # 操作步骤

    self.page.operate()

    def checkPoint(self): # 检查点

    self.page.checkPoint()

    pages再次封装了一层,主要使用了 setupclass+ self.driver.get重定位的方式

    避免用例依赖,并不会每个用例重新启动一个session,重连机制也是这样实现的(后续填坑)

    if kwargs.get("launch", "0") == "0": # 若为空, 刷新页面

    self.driver.get(self.driver.current_url)

    testcase层调用page层

    cclass HomeTest(ParametrizedTestCase):

    def testALoginFail(self):

    app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/LoginFail.yaml"),

    "caseName": sys._getframe().f_code.co_name}

    page = LoginFailPage(app)

    page.operate()

    page.checkPoint()

    def testBLogin(self):

    app = {"logTest": self.logTest, "driver": self.driver, "path": PATH("../Yamls/home/Login.yaml"),

    "caseName": sys._getframe().f_code.co_name}

    page = LoginPage(app)

    page.operate()

    page.checkPoint()

    封装自己的关键字

    在BaseOperate中定义自己的关键字

    def operate_by(self, operate, testInfo, logTest):

    ...........

    elements = {

    be.CLICK: lambda: self.click(operate),

    be.GET_VALUE: lambda: self.get_value(operate),

    be.GET_TEXT: lambda: self.get_text(operate),

    be.SEND_KEYS: lambda: self.send_keys(operate),

    be.MOVE_TO_ELEMENT: lambda: self.move_to_element(operate)

    }

    在用例中yaml传入自己的关键字即可,看看下面的operate_type中的鼠标悬停

    testcase:

    - element_info: cate_item_108698

    find_type: id

    operate_type: move_to_element

    info: 鼠标悬停到.net分类上

    后续

    引入重连机制

    docker grid

    展开全文
  • 请问 手势密码这一段有什么问题啊 一直提示如下错误: File "/Library/Python/2.7/site-packages/appium/webdriver/common/touch_action.py", line 94, in perform self._driver.execute(Command.TOUCH_ACTION, ...

    def test_gestureUnlock(self):

    #time.sleep(5)

    el1 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[10]")

    print el1

    time.sleep(2)

    el2 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[13]")

    print el2

    time.sleep(2)

    el3 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[16]")

    print el3

    time.sleep(2)

    el4 = self.driver.find_element_by_xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[17]")

    print el4

    time.sleep(2)

    Gesture = TouchAction().press(el1).move_to(el2).move_to(el3).move_to(el4).release()

    print Gesture

    time.sleep(2)

    Gesture.perform()

    请问 手势密码这一段有什么问题啊 一直提示如下错误:

    File "/Library/Python/2.7/site-packages/appium/webdriver/common/touch_action.py", line 94, in perform

    self._driver.execute(Command.TOUCH_ACTION, params)

    AttributeError: 'NoneType' object has no attribute 'execute'

    展开全文
  • 混合驱动:把数据驱动、关键字驱动结合起来一起使用testdata.txthttp://www.126.comhttp://www.sohu.comteststep.txtopen||chromevisit||${url}sleep||3主程序脚本hybrid.py#encoding=utf-8import refrom selenium ...

    混合驱动:把数据驱动、关键字驱动结合起来一起使用

    testdata.txt

    http://www.126.com

    http://www.sohu.com

    teststep.txt

    open||chrome

    visit||${url}

    sleep||3

    主程序脚本

    hybrid.py

    #encoding=utf-8

    import re

    from selenium import webdriver

    import time

    with open("teststep.txt") as fp:

    teststeps = fp.readlines()

    with open("testdata.txt") as fp:

    testdata = fp.readlines()

    driver = ""

    def open(browser_name):

    global driver

    if "ie" in browser_name:

    driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")

    elif "chrome" in browser_name:

    driver = webdriver.Chrome(executable_path = "e:\\chromedriver")

    else:

    driver = webdriver.Firefox(executable_path = "e:\\geckodriver")

    def visit(url):

    global driver

    driver.get(url)

    def click(xpath):

    try:

    driver.find_element_by_xpath(xpath).click()

    except:

    print("click fail!")

    raise

    def sleep(times):

    time.sleep(int(times))

    for data in testdata:

    print(data)

    for teststep in teststeps:

    action = teststep.split("||")[0].strip()

    value= teststep.split("||")[1].strip()

    if re.search(r"\$\{\w+\}",value):

    value=re.sub(r"\$\{\w+\}",data.strip(),value)

    try:

    command = "%s(\"%s\")" %(action,value)

    exec(command)

    except:

    print("执行",command,"有异常")

    driver.quit()

    print ("DONE!")

    展开全文
  • 操作浏览器的方法都固定下来,不能变。操作方法需要的字段(定位方法,定位表达式,操作的值)用单独的列表示。...2.关键字驱动的框架的重要组成部分测试步骤(Test Step),测试步骤中的对象(Test ...
  • unittest是python自动化测试的框架,里面集成了很多好用的方法。我们先来看下下面的一段代码(实现了3个测试用例)import unittestfrom selenium import webdriverfrom time import sleepclass TestDemo01(unittest....
  • 这是python+selenium实现Web自动化第八篇博文二、Selenium前七篇博文地址:三、Selenium之-数据驱动框架那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也...
  • 操作浏览器的方法都固定下来,不能变。操作方法需要的字段(定位方法,定位表达式,操作的值)用单独的列表示。...2.关键字驱动的框架的重要组成部分测试步骤(Test Step),测试步骤中的对象(Test ...
  • 我们把上面的这种设计方法叫做关键字驱动,总结以下两点。 1.关键字驱动框架是一种功能自动化测试框架 被称为表格驱动测试 被称为基于动作字的测试。 2.关键字驱动的框架的重要组成部分 测试步骤(Test Step)...
  • 数据驱动和关键字驱动简单例子(登录)数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中地址使用xxx代替数据文件:D:\\test\\loginData.txt文件内容:admin_cyl||123456aadmin_test||a123456...
  • 说明最新的selenium3 python3的开源优化使用配置yamls下的config的urlurl: https://testerhome.com/命令运行python runner.py或者修改start.test.bat中的路径后,直接点击运行结果展示日志目录文件夹:chrome_XXXXX...
  • 对于初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄虚,不就是参数和函数嘛!其中也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现。一、录制/回放的...
  • 自动化领域的两种驱动,对象驱动与数据驱动数据驱动:测试数据的改变引起执行结果的改变 叫 数据驱动关键字驱动:测试对象名字的改变起引起测试结果的改变 叫 关键字驱动1 、读取文件参数化以百度表搜索为例,我们...
  • 这是python+selenium实现Web自动化第八篇博文二、Selenium之-数据驱动框架那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也就是参数的应用化。这里对于数据...
  • 这是python+selenium实现Web自动化第八篇博文二、Selenium前七篇博文地址:三、Selenium之-数据驱动框架那么问题来了,什么是数据驱动呢?就是,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,也...
  • 自动化测试的一个框架,没有使用robotframework,关键字支持大概十几个吧,如果不够可以自己在代码中完善,测试用例写在excel中,运行AutoTest.py就行
  • python selenium 关键字驱动开源 说明 最新的selenium3 python3的开源优化 使用 点击获取源码 配置yamls下的config的url url: https://testerhome.com/ 命令运行 python runner.py 或者修改start....
  • 龙源期刊网http://www.qikan.com.cn基于关键字驱动的Web自动化测试的研究作者:朱宏峰...[关键词]关键字驱动WebSelenium中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1220051-01一、自动化测试技术概述(一)...
  • package ...import java.util.ArrayList;import java.util.Set;import java.util.List;// import org.apache.bcel.generic.Select;//import org.openqa.selenium.support.ui.Select;//import org.ap...
  • 自动化测试现在越来越趋向于平台化,平台化是致力于协同工作,提高效率,让更多人参与自动化的一个过程,在我看来,平台化中,有一个更为关键点,就是关键字驱动,只有把自动化测试的代码转换成为大家更容易懂的自然...
  • 关键字驱动测试(Keyword driver testing)也被称为表格驱动测试或者基于动作字的测试,工作中经常遇到的KDT测试工具有很多,比如Selenium IDE、Katalon Recorder、UFT等。关键字驱动的核心就是对测试用例(步骤)进行...
  • a.数据驱动:从某个数据文件(odbc,csv,excel...关键字驱动:从面向对象角度出发,同样业务逻辑编写成一个类或者函数作为关键字被不同的脚本调用每个步骤对应文件中一行内容c.DDT:官网参考:https://ddt.readthedocs...
  • 关键字驱动测试是数据驱动测试的一种改进类型2. 主要关键字包括三类:被操作对象(Item)、操作(Operation)和值(value),用面向对象形式可将其表现为Item.Operation(Value)3. 将测试逻辑按照这些关键字进行分解,形成...
  • 序本篇旨在通过一个基础demo的实现讲解,提供一个关键字驱动框架实现方案的思路指引。为什么要实现关键字驱动框架?其实之前已经介绍过纯代码方式的自动化框架实现,那为什么还要去进行关键字框架的实现呢?纯代码...
  • test_api框架介绍接口测试框架 --持续完善中 pytest + requests + jenkins + allure 添加pandas(数据分析部分)本框架使用关键字自动化测试框架概念 需要一定的python基础 可适用于复杂业务逻辑api 也可适用于详细的...
  • 关键字驱动测试框架案例框架分析:1.使用外部测试数据文件,使用Excel管理测试用例的集合和每个测试用例的所有测试步骤,实现一个文件中完成测试用例的维护2.每个测试用例的测试结果在一个文件中查看和统计3.通过...
  • 要实现python自动化测试,最根本的方法:关键字驱动,也就是selenium二次封装。 python小白学习过程如下: 看视频学习关键字驱动,再结合项目进行实际操作。
  • 原文转自:http://blog.csdn.net/u010202588/article/details/38639811初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些特点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 622
精华内容 248
关键字:

python关键字驱动

python 订阅