Python自动化测试app学习以及踩到的坑

本文使用真机测试,关于虚拟机连接方式,请自行搜索。

首先需要用到的软件:

    1. pip包管理器   

        安装教程:Windows  windows下python安装pip方法详解_python_脚本之家 (jb51.net)

                          MAC  mac 安装pip教程_quanqxj的博客-CSDN博客_mac pip怎么安装

        前提已经安装了python

    2. Appium客户端

执行命令:pip install Appium-Python-Client

    3. Appium Server

安装对应版本:Release 1.18.3 · appium/appium-desktop (github.com)

    4. JDK

        建议安装jdk8,避免出现不可预知的问题。

    5. SDK

安装教程:Windows  win10环境下Android SDK下载安装及配置教程----Android SDK安装_jinron10的专栏-CSDN博客

                  Mac  安装Homebrew  MacOS-Homebrew - 简书 (jianshu.com)

                           SDK  macOS 安装 Android SDK_mixboot-CSDN博客

设备连接

使用USB将手机连接至电脑,然后将手机打开开发者模式,站在开发者模式中启动USB调试。

查看设备连接:执行命令  adb devices -l。

注意:如果没有配置环境变量,命令执行要在sdk\platform-tools文件夹目录下执行。

测试脚本代码

        测试app:开发者头条

# coding=utf-8
from appium import webdriver
import time, traceback
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Redmi K20 Pro'
desired_caps['appPackage'] = 'io.manong.developerdaily'
desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity'
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
desired_caps['noReset'] = True
desired_caps['newCommandTimeout'] = 6000

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

try:
    driver.implicitly_wait(10)

    #根据id找到元素并点击
    driver.find_element_by_id('io.manong.developerdaily:id/tab_bar_plus').click()
    time.sleep(1)
    ele = driver.find_element_by_xpath("//android.widget.TextView[@text='密码登录']").click()
    time.sleep(1)

    #输入用户名,密码
    ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_phone")
    ele.send_keys("138********")
    ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")
    ele.send_keys("123456")
    time.sleep(2)

    driver.find_element_by_id("io.manong.developerdaily:id/btn_login").click()

except:
    print(traceback.format_exc())
input("Press to quit..")
driver.quit        

注意:由于培训时老师用的是Mac,连接的url是http://0.0.0.0:4723/wd/hub,Windows要改成http://127.0.0.1:4723/wd/hub,这个问题的报错信息如下:

查看apk的包名和launch activity

如果没有配置环境变量,在sdk\build-tools\29.0.3目录下执行aapt dump badging  [apk path]

注意:Windows下如果未修改编码可能会出现编码乱码,虽然不影响结果查看。解决办法:Java CMD命令行输出中文乱码问题_逍遥阁-CSDN博客_java命令行中文乱码

使用uiautomatorviewer查看apk页面元素信息

        在sdk/tools目录下双击执行uiautomatorviewer.bat,然后出现下图所示页面,然后点击第三个图标(图中圈出来的)

Python自动化测试app学习以及踩到的坑_第1张图片

       注意:可能会出现如下错误,解决办法:Android 10不能使用uiautomatorviewer定位元素的终极解决方法 (icode9.com)

Python自动化测试app学习以及踩到的坑_第2张图片

代码执行报错情况:

错误一:权限拒绝

java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
        at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:2050)
        at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1256)
        at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1239)
        at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:476)
        at android.content.ContentProvider.call(ContentProvider.java:2177)
        at android.content.ContentProvider$Transport.call(ContentProvider.java:477)
        at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:399)
        at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:281)
        at android.os.ShellCommand.exec(ShellCommand.java:104)
        at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:49)
        at android.os.Binder.shellCommand(Binder.java:881)
        at android.os.Binder.onTransact(Binder.java:765)
        at android.os.Binder.execTransactInternal(Binder.java:1021)
        at android.os.Binder.execTransact(Binder.java:994)
Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

解决办法:开发者选项打开USB调试

错误二:settings_apk-debug.apk安装失败

Traceback (most recent call last):
  File "c:\Users\DBC601\Desktop\logintest.py", line 15, in 
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  File "C:\dbc\python\version39\lib\site-packages\appium\webdriver\webdriver.py", line 151, in __init__
    super().__init__(
  File "C:\dbc\python\version39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\dbc\python\version39\lib\site-packages\appium\webdriver\webdriver.py", line 225, in start_session
    response = self.execute(RemoteCommand.NEW_SESSION, parameters)
  File "C:\dbc\python\version39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\dbc\python\version39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'C:\\dbc\\python\\sdk\\platform-tools\\adb.exe -P 5037 -s 84af46ba install -g 'C:\\Program Files\\Appium\\resources\\app\\node_modules\\appium\\node_modules\\io.appium.settings\\apks\\settings_apk-debug.apk'' exited with code 1'; Stderr: 'adb: failed to install C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\io.appium.settings\apks\settings_apk-debug.apk: Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]'; Code: '1'

解决办法:开发者选项打开USB安装

你可能感兴趣的:(App自动化测试,python,软件测试)