windows下Appium测试环境搭建, 并配合python操作模拟器

环境搭建

安装JDK

1. Java Downloads | Oracle 下载JDK安装包,按照默认方式无脑按照即可

2. 设置系统环境变量,系统环境变量添加JAVA_HOME, 路劲是jdk安装路径

3. 系统Path变量添加jdk和jre的bin目录

 安装nodejs

Node.js 中文网 下载安装包,默认方式安装即可

下载adb

1. 下载adb

        方法一:安装Android Studio, 通过其所带的SDK manager 下载adb. 

        Android Studio 官方地址Download Android Studio & App Tools - Android Developers

        安装成功后打开sdk manager并设置sdk路径,然后下载tool,这个路径等下要设置到ANDROID_HOME系统变量。在此路径下会有platform_tools里面就有需要的adb.exe。

        方法二: 直接下载SDK manager 包

        我通过方法一,将SDK manager下载到目录 C:\Users\Public\Android,在其platform-tools目录下就有所需的adb.exe。

2. 设置环境变量,系统环境变量添加ANDROID_HOME

 3. 系统Path变量添加adb.exe所在路径

安装模拟器

1. 下载安装模拟器

     夜神模拟器要替换其自带的nox_adb.exe。

        nox_adb.exe在夜神模拟器安装目录的bin目录下,我这是C:\Program Files (x86)\Nox\bin。把上面下载的adb.exe复制到nox_adb.exe所在目录并重命名成nox_adb,替换到原来的nox_adb.exe。

安装appium server

下载地址 https://github.com/appium/appium-desktop/releases/

亲测最新1.22.0的版本启动后会报找不到/Session路径的错误,用1.21.0的版本正常。

Appium 连接模拟器 

1. 启动模拟器后,中通过命令 nox_adb.exe connect 127.0.0.1:$模拟器端口$ 连接模拟器

模拟器端口号
夜神模拟器62001、52001
逍遥模拟器21503
海马玩模拟器26944
mumu模拟器7555
天天模拟器6555
Genymotion5555
雷神模拟器5555
蓝叠模拟器每次启动不一样,可以到设置->高级->Android调试(ADB)查看

2. 启动Appium

    直接通过desktop程序运行,或者命令行启动appium

3. 打开Appium inspector工具,并填入以下信息,点击start session按钮即可连接,然后可以通过inspector工具查看元素的信息。

除了这三个信息,如果指定测试app,还可以提供和appActivity。这两个属性的获取方式如下:

方法一:

        在上面提到的android sdk路径下,build_tool/$sdk_版本号$/ 路径里有aapt.exe, 使用以下命令:

        aapt.exe dump badging $电脑上apk文件路径$

        输出的信息中,package: name就是appPackage, launchable-activity就是appActivity

方法二:

        adb shell dumpsys activity activities | findstr $app名$

        以Chrom浏览器为例,通过命令可以得到输出intent={cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.chrome/org.chromium.chrome.browser.ChromeTabbedActivity}

        其中cmp=里com.android.chrome是appPackage,org.chromium.chrome.browser.ChromeTabbedActivity是appActivity

4. python连接appium server, 并操Chrome浏览器

import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver import Remote
from appium.webdriver.webelement import WebElement as MobileWebElement


class AppiumClient:
    def __init__(self, os_name: str, os_version: str, device_name: str):
        self.caps = dict()
        self.caps['platformName'] = os_name
        self.caps['platformVersion'] = os_version
        self.caps['deviceName'] = device_name
        self.caps['resetKeyboard'] = True
        self.driver: Remote = None

    def __del__(self):
        if self.driver:
            self.driver.quit()

    def launch_app(self, package: tuple = None, app_path=''):
        """
        :param package: tuple (appPackage, appActivity)
        :param app_path: apk path in PC
        :return:
        """
        try:
            if app_path:
                self.caps['app'] = app_path
            if package:
                self.caps['appPackage'] = package[0]
                self.caps['appActivity'] = package[1]
            self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.caps)
            return True
        except Exception as e:
            print(str(e))
            return False

    def find_element(self, who: str, by: str):
        print('look for %s by %s' % (who, by))
        element: MobileWebElement = self.driver.find_element(by, who)
        return element

    def click(self, who: str, by=AppiumBy.ID):
        element = self.find_element(who, by)
        if element:
            print('click %s' % element)
            element.click()
            return True
        else:
            return False

    def input(self, text: str, who: str, by=AppiumBy.ID):
        element = self.find_element(who, by)
        if element:
            print("send text %s" % text)
            element.click()
            element.send_keys(text)
            return True
        else:
            return False

    def back(self):
        print('back')
        self.driver.back()

    def wait_element(self, who: str, by=AppiumBy.ID, time_out=30):
        for i in range(time_out):
            element = self.find_element(who, by)
            if element:
                return True
            else:
                print('sleep 1s wait for %s' % who)
                time.sleep(1)
        print('wait %s more than %ds' % (who, time_out))
        return False

    def get_attributes(self, who: str, by=AppiumBy.ID):
        element = self.find_element(who, by)
        if element:
            attributes = dict()
            attributes['checkable'] = element.get_attribute('checkable')
            attributes['long-clickable'] = element.get_attribute('long-clickable')
            attributes['clickable'] = element.get_attribute('clickable')
            attributes['checked'] = element.get_attribute('checked')
            attributes['selected'] = element.get_attribute('selected')
            attributes['text'] = element.get_attribute('text')
            attributes['focused'] = element.get_attribute('focused')
            return attributes
        else:
            return None

    def print_all_element(self):
        print(self.driver.page_source)


if __name__ == "__main__":
    client = AppiumClient('Android', '7.1.2', 'OnePlus5')
    client.launch_app(('com.android.chrome', 'org.chromium.chrome.browser.ChromeTabbedActivity'))
    client.wait_element('com.android.chrome:id/url_bar') # 通过inspctor获得ID
    print(client.get_attributes('com.android.chrome:id/url_bar'))
    print(client.get_all_element())
    input()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值