appium自动化

POM设计原理

POM(page object model) 页面对象模型,主要应用于 UI 自动化测试框架的搭建,主流设计模式之
一,页面对象模型:结合面向对象编程思路:把项目的每个页面当做一个对象进行编程

POM的版层

第一层 :basepage : 描述每个页面相同的属性及行为
第二层: pageobject ( 每个的独有特征及独有的行为 )
第三层: testcase ( 用例层,描述项目业务流程 )
第四层: testdata( 数据层 )

代码实现

po 模型(风车动漫)
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction

caps = {}
caps["deviceName"] = "emulator-5554"
caps["platformName"] = "Android"
caps["appPackage"] = "fengchedongman.apps.com"
caps["appActivity"] = "com.Stub.App"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
driver.implicitly_wait(60)
a1=driver.find_element_by_xpath('//*[contains(@text,"进入软件")]')
a1.click()
a1=driver.find_element_by_xpath('//*[contains(@text,"进入软件")]')
a1.click()
a2=driver.find_element_by_id('com.android.packageinstaller:id/permission_allow_button')
a2.click()
a2=driver.find_element_by_id('com.android.packageinstaller:id/permission_allow_button')
a2.click()
a2=driver.find_element_by_id('com.android.packageinstaller:id/permission_allow_button')
a2.click()
a3=driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.View')
a3.click()
a4=driver.find_element_by_id('fengchedongman.apps.com:id/xo')
a4.click()
a4=driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.LinearLayout/android.widget.LinearLayout/android.view.ViewGroup/android.view.View')
a4.click()
a4=driver.find_element_by_id('fengchedongman.apps.com:id/a0o')
a4.send_keys('冒险')
a4=driver.find_element_by_id('fengchedongman.apps.com:id/a0j')
a4.click()
a5=driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.ImageView')
a5.click()
a5=driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[3]/android.widget.FrameLayout[2]/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.TextView')
a5.click()
po 模型操作
basepage
class BasePages:
    def __init__(self,driver):
        self.driver = driver
    #元素定位
    def locator(self,*loc):
        return self.driver.find_element(*loc)
    #清空
    def clear(self,*loc):
        self.locator(*loc).clear()
    #输入
    def input(self,test,*loc):
        self.locator(*loc).send_keys(test)
    #点击
    def click(self,*loc):
        self.locator(*loc).click()
    #滑动(上下左右滑动)
    def swipe(self,start_x,start_y,end_x,end_y,duration=0):
    #获取屏幕的尺寸
        window_size = self.driver.get_window_size()
        x = window_size["width"]
        y = window_size["height"]
        self.driver.swipe(start_x=x*start_x,
                          start_y=y*start_y,
                          end_x= x*end_x,
                          end_y=y*end_y,
                          duration=duration)

datayaml

caps:
  deviceName : "emulator-5554"
  platformName : "Android"
  appPackage : "fengchedongman.apps.com"
  appActivity : "com.Stub.App"

reradyaml

import yaml,os
class ReadYaml():
    def readyaml(self,a):
        path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
        dd = os.path.join(path, a)
        with open(dd,'r',encoding='utf-8') as f :
            data=yaml.load(stream=f,Loader=yaml.FullLoader)
            return data

pages

page1

from base.basepage import BasePages
from appium.webdriver.common.mobileby import MobileBy
class Page1(BasePages):
    def __init__(self,driver):
        BasePages.__init__(self,driver)
    def join1(self):
        self.click(MobileBy.XPATH,"//*[contains(@text,'进入软件')]")
    def join2(self):
        self.click(MobileBy.XPATH,"//*[contains(@text,'进入软件')]")

page2

from base.basepage import BasePages
from appium.webdriver.common.mobileby import MobileBy
class Page2(BasePages):
    def __init__(self,driver):
        BasePages.__init__(self,driver)
    def qx1(self):
        self.click(MobileBy.ID,'com.android.packageinstaller:id/permission_allow_button')
    def qx2(self):
        self.click(MobileBy.ID,'com.android.packageinstaller:id/permission_allow_button')
    def qx3(self):
        self.click(MobileBy.ID,'com.android.packageinstaller:id/permission_allow_button')

page3

from base.basepage import BasePages
from appium.webdriver.common.mobileby import MobileBy
class Page3(BasePages):
    def __init__(self,driver):
        BasePages.__init__(self,driver)
    def book_list(self):
        self.click(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.View')

page4

from base.basepage import BasePages
from appium.webdriver.common.mobileby import MobileBy
class Page4(BasePages):
    def __init__(self,driver):
        BasePages.__init__(self,driver)
    def tips(self):
        self.click(MobileBy.ID,'fengchedongman.apps.com:id/xo')
    def search1(self):
        self.click(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.LinearLayout/android.widget.LinearLayout/android.view.ViewGroup/android.view.View')
    def search2(self,text):
        self.input(text,MobileBy.ID,'fengchedongman.apps.com:id/a0o')
    def search3(self):
        self.click(MobileBy.ID,'fengchedongman.apps.com:id/a0j')

page5

from base.basepage import BasePages
from appium.webdriver.common.mobileby import MobileBy
class Page5(BasePages):
    def __init__(self,driver):
        BasePages.__init__(self,driver)
    def dianjimanhua(self):
        self.click(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.ImageView')
    def addshuoc(self):
        self.click(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[3]/android.widget.FrameLayout[2]/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.TextView')

单元测试

import unittest
from appium import webdriver
from readdata.readyaml import ReadYaml
from pages.page1 import Page1
from pages.page2 import Page2
from pages.page3 import Page3
from pages.page4 import Page4
from pages.page5 import Page5
a=ReadYaml()
r=a.readyaml('data/datayaml.yaml')
class AppTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver=webdriver.Remote("http://localhost:4723/wd/hub",r['caps'])
        cls.driver.implicitly_wait(60)
    def test_001(self):
        x=Page1(self.driver)
        x.join1()
        x.join2()
    def test_002(self):
        x=Page2(self.driver)
        x.qx1()
        x.qx2()
        x.qx3()
    def test_003(self):
        x=Page3(self.driver)
        x.book_list()
    def test_004(self):
        x=Page4(self.driver)
        x.tips()
        x.search1()
        x.search2('冒险')
        x.search3()
    def test_005(self):
        x=Page5(self.driver)
        x.dianjimanhua()
        x.addshuoc()
    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit
if __name__ == '__main__':
    unittest.main()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值