• 测试学习笔记(P123P161教程from凡云教育)之UI自动化


    P126

    自动化测试用例设计原则:
    1.自动化来覆盖需要重复的基本功能、基本业务流以及正向路径操作,避免复杂的异常测试、复杂业务流程;
    2.尽量保持用力之间的独立性,最好不要依赖关系;
    3.如果自动化测试进行了数据修改,测试执行完成之后尽量还原,避免对其他用例的影响;
    4.每个自动化测试用例只验证一个功能点。

    P127-129

    Selenium 特点及配置安装、工作原理、简单示例
    Location
    Operation
    Verification
    Expect

    P130
    Webdriver 常用浏览器操作
    打开 driver.get(url) 本地文件也可以,url需要写协议
    关闭:driver.quit()结束进程或driver.close()仅关闭当前窗口
    设置窗口大小:diver.set_window_size(200,500)
    最大化窗口:driver.maximize_window()
    获取网页源码:driver.page_source
    获取窗口名称:driver.name
    刷新页面:driver.refresh()
    获取页面标题:driver.title
    获取当前页面url:driver.current_url
    获取当前页面截图:driver.get_screenshot_as_file(path)

    P131-134
    html基础知识
    Head区域头部不可见
    容器型元素:div form table
    页面元素:a\img\input\select\checkbox\radio\textarea\submit……
    Js:定义元素行为

    P135-143
    元素定位
    find_element()
    find_elements()[]
    Class用于写样式,当元素的class有多个值时,不建议用class name定位
    tag name 定位,用于查找同类型标签
    Link text/partial link text,通过a标签的文本来定位链接
    Console中可用用$x(“”)调试xptah
    Console中可用用$$x(“”)调试xptah
    css选择器定位:
    elements = driver.find_element(‘css selector’, ‘class’)
    Id用#,class直接写,父子关系用大于号,子孙关系用空格

    P144

    find_element 和 find_elements 区别
    返回:第一个元素 列表形式返回所有元素
    无元素返回:抛异常 空列表

    P145

    Webdriver常见元素操作
    Clear
    Send_keys
    Click
    Text
    Get_attribute(name)
    Is_displayed 返回布尔值,对元素属性是否可见做判断

    P146-147

    等待操作

    强制等待:
    import time
    time.sleep(3)

    隐式等待,全局有效,等待的时元素出现(存在,加载出该元素)
    driver.implicitly_wait(3)

    显示等待
    多个等待同时存在,以等待时间最长的为准?
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC (设置等待条件)
    写法
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((‘id’,’btn3’))

    常见EC方法
    title_is() 标签标题是否等于
    title_contains() 标签标题是否包含
    presence_of_element_located(locator) 判断某个元素是否被加入到dom中,但不等于该元素可见
    visibility_of_element_located(locator) 判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽、高都不等于0
    invisibility_of_element_located(locator) 判断某个元素是否不可见
    element_to_be_clickable(locator) 判断某个元素是否可见并且是enable(一个属性)的,这样才能点击
    text_to_be_present_in_element(locator): 判断某个元素中的text是否包含了预期的字符串

    P148-149

    常见元素操作

    组合按键写法:
    from selenium.webdriver.common.keys import Keys
    send_keys(Keys.SHIFT, “fanyun”)
    send_keys(Keys.CONTROL+’a’)

    下拉框:
    from selenium.webdriver.support.ui import Select
    Select(driver.find_element(‘tag_name’,’select’)).select_by_visible_text(‘成都’)
    P150-151
    Frame
    Switch_to.frame() 把当前定位的主体切换到另一个框架内部
    Switch_to.default_content() 切回到默认框架

    P152
    文件上传
    Webdriver 并未提供方法
    Input标签处理思路
    driver.get('https://www.camscanner.com/pdftoword')
    driver.find_element('xpath', "//input[@accept= '.pdf']").send_keys(r'C:\Users\heliuhui\Desktop\000temp\fpheliuhi.pdf')

    P153
    多窗口切换
    switch_to.window(handle)
    ow = driver.current_window_handle
    driver.switch_to.window(driver.window_handle[1])
    driver.switch_to.window(ow)

    P154-155
    悬浮菜单操作

    from selenium.webdriver.common.action_chains import ActionChains

    driver.get('https://www.baidu.com/')
    item = driver.find_element('id', 's-usersetting-top')
    ActionChains(driver).move_to_element(item).perform()
    driver.find_element('link text', '高级搜索').click()

    ajax相关操作写法

    driver.get('https://www.baidu.com/')
    driver.find_element('id', 'kw').send_keys('python')
    time.sleep(3)
    menus = driver.find_elements('class name', 'bdsug-overflow')
    time.sleep(3)
    print(len(menus))

    for menu in menus:
    print(menu.text)

    menus[3].click()

    P156
    验证码操作
    解决方法:1. 去掉验证码(改代码,适用于未上线的项目);2. 固定验证码(适用于已上线项目)

    P157
    unittest框架,在ui自动化中的作用
    1.在脚本中增加断言
    2.通过框架对脚本进行管理
    3.自定义测试报告
    4.框架中做参数化

    unittest框架使用规则
    1.必须集成unittest.TestClass类
    2.可以定义setUp(Class)和tearDown(Class)方法进行初始化
    3.测试方法必须以test开头
    4.pycharm自带该框架,也可以用普通方式运行
    5.文件名不要命名unittest,影响使用

    P158
    setUpClass运行一次tearDownClass同理
    setUp运行多次(用例个数)tearDown同理
    测试方法执行顺序按照用例命名的字母顺序,比如testA()在testB()之前执行

    P159-161

    TestLoad类常用方法
    loadTestsFromTestCase,加载类
    loadTestsFromModule,加载模块(.py文件)
    loadTestsFromNames,以名称加载测试方法
    discover() 从路劲加载

    加载类

    import unittest 导入库
    from unittestpractice import MyTestCase 导入测试用例

    if name == 'main':
    mc = unittest.defaultTestLoader.loadTestsFromTestCase(MyTestCase) 默认加载器加载测试用例
    suite = unittest.TestSuite(mc) 组装
    unittest.TextTestRunner().run(suite) 调用

    加载模块

    import unittest
    import unittestpractice, unittestp2

    if name == 'main':
    names= [unittestpractice, unittestp2]
    modules = []

    for item in names:
        module = unittest.defaultTestLoader.loadTestsFromModule(item)
        modules.append(module)
    
    suite = unittest.TestSuite(modules)
    unittest.TextTestRunner().run(suite)
  • 相关阅读:
    Balder 3D开发系列之创建基本动画
    Expression Blend 的点滴(1)ListBox华丽大变身
    Balder 3D开发系列之创建天空盒
    Balder 3D开发系列之创建自己的primitives
    silverlight 中的应用程序库缓存
    Balder 3D开发系列之——sprite结合Camera旋转木马特效
    VisualTreeHelper不仅仅只是用来查看可视化树结构的
    Balder 3D开发系列之与Sprite初次相遇
    Balder 3D开发系列之给自定义基本体进行贴图操作
    【图解】通过Expression Blend快速制作具有物理效果的动画游戏
  • 原文地址:https://www.cnblogs.com/mercycnblog/p/15962936.html
Copyright © 2020-2023  润新知