Appium의 세련된 작동 방식

3895 단어
샤오미몰 주문 조작을 예로 들면 샤오미몰 앱을 시작하고 분류를 클릭하며 샤오미 핸드폰을 클릭하고 샤오미 10지존 버전을 클릭하며 쇼핑 카트에 가입하고 확인을 클릭하면...
원본 스크립트
from time import sleep
from appium import webdriver
from selenium.common.exceptions import NoSuchElementException

caps = {
    'platformName': 'Android',
    'platformVersion': '6.0.1',
    'deviceName': 'emulator-5554',
    'appPackage': 'com.xiaomi.shop',
    'appActivity': 'com.xiaomi.shop2.activity.MainActivity',
    'automationName': 'uiautomator2'
}

dr = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
dr.implicitly_wait(10)
sleep(2)

#       
try:
    dr.find_element('xpath', '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.ImageView')
    dr.keyevent(4)
except:
    print('   ')

dr.find_element_by_xpath('//*[@text="  "]').click()
dr.find_element_by_xpath('//*[@text="    "]').click()
dr.find_element_by_xpath('//*[@text="  10    "]').click()
dr.find_element_by_xpath('//*[@text="     "]').click()
dr.find_element_by_xpath('//*[@text="  "]').click()

작업 패키지
from time import sleep

from appium import webdriver
from selenium.common.exceptions import NoSuchElementException


APPIUM_SERVER = 'http://127.0.0.1:4723/wd/hub'
AUTOMATION_NAME = 'uiautomator2'


class Device:
    def __init__(self, device_name, version, platform='Android'):
        print(f'      {platform} {version} {device_name}')
        self.driver = None
        self.caps = dict(platformName=platform, platformVersion=version,
                         deviceName=device_name, automationName=AUTOMATION_NAME)

    def launch_app(self, package, activity):
        print(f'     {package}/{activity}')
        self.caps.update(appPackage=package, appActivity=activity)
        self.driver = webdriver.Remote(APPIUM_SERVER, self.caps)
        self.driver.implicitly_wait(10)
        return self

    def find(self, target):
        # target   id=kw   ,     = ,   text=target
        by, value = target.split('=') if '=' in target else 'text', target
        if by == 'text':
            by, value = 'xpath', f'//*[@text="{value}"]'
        return self.driver.find_element(by, value)

    def try_find(self, target):
        try:
            return self.find(target)
        except NoSuchElementException:
            print(f'   {target}    ')

    def click(self, target):
        print(f"   {target}")
        self.find(target).click()
        return self   #   self           

    def input_to(self, target, text):
        print(f"  {target}    {text}")
        self.find(target).send_keys(text)
        return self

    def back(self):
        print('  ')
        self.driver.keyevent(4)
        return self

    def wait(self, secs=1):
        sleep(secs)
        return self

사용
mumu = Device(device_name='emulator-5554', version='6.0.1')
mumu.launch_app(package='com.xiaomi.shop', activity='com.xiaomi.shop2.activity.MainActivity').wait(2)

#       
ads = mumu.try_find('xpath=/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/'
                                    'android.widget.FrameLayout/android.widget.ImageView')
mumu.back()

#     
mumu.click('  ').click('    ').click('  10    ').click('     ').click('  ')

다음과 같이 출력을 실행합니다.
      Android 6.0.1 emulator-5554
     com.xiaomi.shop/com.xiaomi.shop2.activity.MainActivity
  
     
       
     10    
        
     

image

좋은 웹페이지 즐겨찾기