zoukankan      html  css  js  c++  java
  • poium测试库介绍

    poium测试库前身为selenium-page-objects测试库,我在以前的文章中也有介绍过:这可能是最简单的Page Object库,项目的核心是基于Page Objects实现元素定位的封装。该项目由我个人在维护,目前在公司项目中已经得到的应用。


    ### poium的优势

    Page Objects设计模式大家都懂,以往我们对Page层的封装大概是这样的。

    class BasePage():
    
       def __init__(self, driver):
           self.dr =driver    
    
       def by_id(self, elem):
           returnself.dr.find_element_by_id(elem)
    
    class BaiduIndexPage(BasePage):
    
       # 搜索框
       @property   
       def search_input(self):
           return self.by_id("kw")
    
       # 搜索按钮
       @property
       def search_button(self):
           return self.by_id("su")
    
    

    大体上是每个操作元素封装为一个方法,这样并没什么不好的,只是不够简洁。而poium可以极大的简化元素的定义,甚至接近,配置文件。

    from poium import Page, PageElement
    
    class BaiduIndexPage(Page):
        search_input= PageElement(css="#kw", describe="搜索框")
        search_button= PageElement(css="#su", describe="搜索按钮")
    

    几百个元素的也只不过几百行代码,使用也远比配置文件简单。将元素写到配置文件里,你还要考虑如何读取。

    不管是前一种page层封装,还是使用poium封装在测试用例中的使用并无太大的差别。

    from selenium import webdriver
    import unittest
    
    defbaiduTest(unittest.TestCase):
     
        defsetUp(self):
            self.driver =webdriver.Chrome()
            self.base_url ="https://www.baidu.com"
        
        def tearDown(self):
            self.driver.quit()
        
        def test_search(self):
            page= BaiduIndexPage(driver)
            page.get(self.base_url)
            page.search_input.send_keys("poium")
            page.search_button.click()
            # .....
     
    

    ### JavaScript API

    在我们项目中,时常要用到JavaScript操作,比如日期控件不好操作,那会通过JS的removeAttribute() 删除掉元素的某些属性,使他可以通过输入完成日期的“选择”。比如,有些元素用Selenium点击不了,但JS的click()却可以,再比如有些弹窗不是必现的,就必须使用异常捕捉,但JS可以更轻松的处理弹窗。

    于是,我封装了一组由JS实现的API。

    from poium import Page
    
    class BaiduPage(Page):
        # 元素定位只支持CSS语法
        search_input ="#kw"
        search_button ="#su"
    
    def test_attribute(self):
        """
        元素属性修改/获取/删除
        :param browser: 浏览器驱动
        """
        driver= webdriver.Chrome()
        page =BaiduPage(browser)
        page.get("https://www.baidu.com")
        page.remove_attribute(page.search_input,"name")
        page.set_attribute(page.search_input, "type", "password")
        value =page.get_attribute(page.search_input, "type")
        assert value =="password"
    
    

    不过,JS实现的API中的只支持CSS定位。

    强列推荐使用CSS定位,因为poium还可以将操作过的元素在自动化的运行过程中给你标记出来。

    这样当程序运行失败需要截图时就比较清晰了,但是,这个功能还不完善。


    ### appium 支持

    为什么不是不叫selenium-page-objects了?因为poium也支持appium了呀,使用之前的名字如何表达对appium的支持呢?

    from appium import webdriver
    from poium import Page,PageElement
     
    class CalculatorPage(Page):
        number_1 = PageElement(id_="com.android.calculator2:id/digit_1")
        number_2 = PageElement(id_="com.android.calculator2:id/digit_2")
        add = PageElement(id_="com.android.calculator2:id/op_add")
        eq = PageElement(id_="com.android.calculator2:id/eq")
    
    # APP定义运行环境
    desired_caps = {
        'deviceName': 'AndroidEmulator',
        'automationName': 'appium',
        'platformName': 'Android',
        'platformVersion': '7.0',
        'appPackage': 'com.android.calculator2',
        'appActivity': '.Calculator',
    }
    driver =webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    page =CalculatorPage(driver)
    page.number_1.click()
    page.add.click()
    page.number_2.click()
    page.eq.click()
     
    driver.quit()
    

    在appium中的使用与selenium是一致的!当然,appium扩展了更多的定位方法。

    • ios_uiautomation
    • ios_predicate
    • ios_class_chain
    • android_uiautomator
    • android_viewtag
    • android_datamatcher
    • accessibility_id
    • image
    • custom

    poium同样支持这些定位,在appium中如何使用,那么这里也是一样的。

    最后,poium并不会对你的现有自动化产生太多的影响,它只是对元素操作的封装,你可以在项目当中随意的选择是否要用它。

    项目地址:poium

    支持pip安装:

    pip install poium
    
  • 相关阅读:
    Android之dialog
    android上下文菜单(ContextMenu)
    Android中Handler的使用2
    Intent 各种跳转 .
    Android之Adapter用法总结
    android之Menu 实例与详解
    android学习之FrameLayout
    Andriod: 在xml布局中使用自定义属性
    你软考了吗?
    菜鸟从零学习数据库(三)——存储过程
  • 原文地址:https://www.cnblogs.com/fnng/p/10739141.html
Copyright © 2011-2022 走看看