Java+Appium安装和入门测试

目录

一.环境搭建

1.jdk安装

2.安装Android SDK

3.appium安装

二.使用Appium

简单的代码入门

三种等待方式


一.环境搭建

1.jdk安装

首先在Oracle官网上下载jdk1.8.Java Downloads | Oracle,如下图所示 我下载下面画圈的,基本点下一步就可以了,在路径选择那里可以选择自己的路径

 

然后在系统环境中配置jdk路径

 然后在Path中添加下面

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

然后在cmd中,输入Java -version会显示jdk版本就是成功了

2.安装Android SDK

下载链接AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

 

 点开安装包(右键管理员模式打开)

 

 然后在安装目录双击打开SDK Manage.exe选择需要安装的api版本和对应的工具,这些在运行模拟器和真机测试的时候会使用到

 要点击以下地方

变成上面那样后就可以进行下载了

安装好之后

若是双击“SDK Manager.exe”一直闪退,打开tools/android.bat文件修改内容如下

打开SDK的tools/目录,然后编辑Android.bat内容


@echo off
rem Copyright (C) 2007 The Android Open Source Project
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem      http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem Useful links:
rem Command-line reference:
rem   http://technet.microsoft.com/en-us/library/bb490890.aspx

rem don't modify the caller's environment
setlocal enableextensions

rem Set up prog to be the path of this script, including following symlinks,
rem and set up progdir to be the fully-qualified pathname of its directory.
set prog=%~f0

rem Grab current directory before we change it
set work_dir=%cd%

rem Change current directory and drive to where the script is, to avoid
rem issues with directories containing whitespaces.
cd /d %~dp0


rem Check we have a valid Java.exe in the path.

rem 原来的内容如下
rem set java_exe=
rem call lib\find_java.bat
rem if not defined java_exe goto :EOF

rem 修改为:
set java_exe=D:\Program Files\Java\jdk-1.8\bin\java.exe
rem D:\Program Files\Java\jdk-1.8\bin\java.exe  为java的路径

set jar_path=lib\sdkmanager.jar;lib\swtmenubar.jar

rem Set SWT.Jar path based on current architecture (x86 or x86_64)
for /f "delims=" %%a in ('"%java_exe%" -jar lib\archquery.jar') do set swt_path=lib\%%a

:MkTempCopy
    rem Copy android.bat and its required libs to a temp dir.
    rem This avoids locking the tool dir in case the user is trying to update it.

    set tmp_dir=%TEMP%\temp-android-tool
    xcopy "%swt_path%" "%tmp_dir%\%swt_path%" /I /E /C /G /R /Y /Q > nul
    copy /B /D /Y lib\common.jar         "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\commons-codec*     "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\commons-compress*  "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\commons-logging*   "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\dvlib.jar          "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\gson*              "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\guava*             "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\httpclient*        "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\httpcore*          "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\httpmime*          "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\layoutlib-api.jar  "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\org-eclipse-*      "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\sdk*               "%tmp_dir%\lib\"          > nul
    copy /B /D /Y lib\swtmenubar.jar     "%tmp_dir%\lib\"          > nul

    rem jar_path and swt_path are relative to PWD so we don't need to adjust them, just change dirs.
    set tools_dir=%cd%
    cd /d "%tmp_dir%"

:EndTempCopy

rem The global ANDROID_SWT always override the SWT.Jar path
if defined ANDROID_SWT set swt_path=%ANDROID_SWT%

if exist "%swt_path%" goto SetPath
    echo ERROR: SWT folder '%swt_path%' does not exist.
    echo Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.
    goto :EOF

:SetPath
rem Finally exec the java program and end here.
REM set REMOTE_DEBUG=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
call "%java_exe% %REMOTE_DEBUG%" "-Dcom.android.sdkmanager.toolsdir=%tools_dir%" "-Dcom.android.sdkmanager.workdir=%work_dir%" -classpath "%jar_path%;%swt_path%\swt.jar" com.android.sdkmanager.Main %*

rem EOF
 

配置环境变量

//新建 ANDROID_HOME环境变量
ANDROID_HOME = E:\Android\sdk

//在path变量边增加以下值
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
%ANDROID_HOME%\build-tools\29.0.3

然后打开win+R输入cmd打开命令窗口输入

adb verison

 显示如上就是安装成功。

3.appium安装

下载地址appium / Appium.app / Downloads — Bitbucket

 解压运行exe文件,全部点击下一步即可

 

 配置好appium环境

 然后打开win+R输入cmd打开命令窗口输入

appium-doctor

 显示如上就是安装成功

二.使用Appium        

        首先Android SDK安装好后,手机要打开开发者模式,具体看个人手机型号,百度可以知道,然后用数据线连接,如下画圈的name就是后面连接要用的deviceName,如果是无线连接,也是同样的位置的例如是127.0.0.1:8080,那么deviceName就是127.0.0.1:8080,保持连接

1.下载Appium Server GUI

 安装node.js:Download | Node.js

安装Appium Server:

右键管理员权限打开cmd输入

npm install -g appium

安装appium Server GUI:https://github.com/appium/appium-desktop/releases

然后启动appium Server GUI

appium的端口一般是默认4723,如上填写,然后点击startServer ,进入后界面如下

 点击右上角的放大镜,会转跳到网页,这边直接给地址:Releases · appium/appium-inspector · GitHub

选择合适的版本

 正常的下一步安装,然后打开Appium Inspector,如下:

 注意画框里面的数据填写,很关键,现在最下面的填写词可以直接连接到手机中,如果要启动指定的app,需要开打cmd,连接的手机上面打开想获取的app,输入

 adb shell dumpsys window | findstr mCurrentFocus #在adb中查看当前手机运行的应用

就会获得如下,我现在是在微信,所包名是com.tencent.mm,正在进行的活动连接是com.tencent.mm.ui.LauncherUI                                                                                        

 填写完整之后参考如下,然后点击Start Session就进入微信了

下面是经常要使用的一些属性名:

  • deviceName:指定要使用的设备名称或 ID。
  • platformName:指定要运行的移动操作系统(如 Android、iOS 等)。
  • appPackage:指定要启动的应用程序包名。
  • appActivity:指定要启动的应用程序 Activity 名称。
  • noReset:指定是否在每个测试运行前清除应用程序数据和缓存(默认为 false)。
  • fullReset:指定是否在每个测试运行前卸载当前安装的应用程序并重新安装(默认为 false)。
  • automationName:指定要使用的自动化引擎(如 Appium、Espresso、XCUITest 等)。
  • udid:指定设备的唯一设备标识符。
  • unicodeKeyboard:指定是否启用 Unicode 输入(用于支持中文输入等)。
  • resetKeyboard:指定是否在测试运行后重置输入法设置。

 

简单的代码入门

Java的一个代码编写的环境我就不多赘述了

首先导包

 <!-- https://mvnrepository.com/artifact/io.appium/java-client -->
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>8.5.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.8.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>

        <!-- 可以根据包名去https://mvnrepository.com/地址的库里找最新版的 -->

然后代码编写,下面的代码操作是

1.打开微信

2.点击搜索框,获取搜索框的详细信息,比如id,在代码中使用为,该代码解析为,点击id为com.tencent.mm:id/f15的组件

driver.findElement(By.id("com.tencent.mm:id/f15")).click();

3.输入想搜索的聊天名,在代码中表示

 WebElement element = driver.findElement(By.id("com.tencent.mm:id/cd7"));
        //下面的sendKeys("")是输入值,可以修改你想查找的好友或者聊天框的名字,他会选中那个框
        element.sendKeys("X2825青州帝盟");

 

4.选中聊天名,操作为点击这个地方,进入聊天 ,代码操作为

 driver.findElement(By.id("com.tencent.mm:id/kpm")).click();

5.输入要发送的信息,操作与上面输入搜索一样,代码操作为

 这个我加了循环,可以做信息轰炸

 for (int i=0;i<10000;i++){
        driver.findElement(By.id("com.tencent.mm:id/b4a")).sendKeys("自动化代码测试"+i);
        driver.findElement(By.id("com.tencent.mm:id/b8k")).click();
        }

6.点击发送

这个操作就是选中发送按钮获取id,操作与之前相同,不多赘述了

import io.appium.java_client.android.AndroidDriver;
import lombok.extern.slf4j.Slf4j;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;


@Slf4j
public class SampleTest {

    private AndroidDriver driver;

    @Before
    public void setUp() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("deviceName", "Android Emulator");
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("appium:platformVersion", "11");
        desiredCapabilities.setCapability("appPackage", "com.tencent.mm");
        desiredCapabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI");
        desiredCapabilities.setCapability("noReset", true);
        desiredCapabilities.setCapability("appium:ensureWebviewsHavePages", true);
        desiredCapabilities.setCapability("appium:nativeWebScreenshot", true);
        desiredCapabilities.setCapability("appium:connectHardwareKeyboard", true);
        // ...其他设置
        URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");

        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
        //下面这行是等待函数,隐式等待是在尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间。这个设置是15秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期
        //如果去掉后会报错,因为该脚本本质上是模仿用户点击操作,app不会反应太快,所以会报错,得设置等待
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }
    
    //通过刚才appium上面录制的操作,可以复制到@Test的方法里面执行
    @Test
    public void sampleTest() throws InterruptedException {
        driver.findElement(By.id("com.tencent.mm:id/f15")).click();
        WebElement element = driver.findElement(By.id("com.tencent.mm:id/cd7"));
        //下面的sendKeys("")是输入值,可以修改你想查找的好友或者聊天框的名字,他会选中那个框
        element.sendKeys("X2825青州帝盟");
        driver.findElement(By.id("com.tencent.mm:id/kpm")).click();
        for (int i=0;i<10000;i++){
        driver.findElement(By.id("com.tencent.mm:id/b4a")).sendKeys("自动化代码测试"+i);
        driver.findElement(By.id("com.tencent.mm:id/b8k")).click();
        }
    }

    @After
    public void tearDown() {

    }
}

三种等待方式

一、隐式等待

driver = new AndroidDriver(remoteUrl, desiredCapabilities);
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);


隐式等待:是在尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间。这个设置是15秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期

二、显示等待

driver = new AndroidDriver(remoteUrl, desiredCapabilities);
WebDriverWait wait =new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id(“kw”)));


显示等待:定义了等待条件,只有该条件触发,才执行后续代码。
在0-5s中去定位id为“kw”的元素,WebDriverWait默认每500ms就调用一次ExpectedCondition直到定位成功或者时间截止,ExpectedCondition的返回值要么为true要么为不为空的对象,在规定时间内若没有定位成功元素,则until()会抛出org.openqa.selenium.TimeoutException 。

三、强制等待

Thread.sleep(1000);

强制等待:指定了固定的等待时长,单位秒
 

好了,现在你以及会写脚本了,一下是一些常用的adb命令

adb常规指令

连接设备

adb connect <IP地址> # 连接到指定IP地址的设备 
adb devices           # 列出所有已连接的设备

安装和卸载应用

adb install <apk文件路径>   # 安装指定apk文件 
adb uninstall <包名>         # 卸载指定包名的应用 
adb shell pm list packages   # 列出所有已安装的应用包名

操作应用

adb shell dumpsys window | findstr mCurrentFocus #在adb中查看当前手机运行的应用 
adb shell am start -n <包名>/<启动activity>   # 启动指定应用程序 
adb shell am force-stop <包名>               # 强制停止指定应用 
adb shell input keyevent <键值>             # 发送一个按键事件,如HOME键、BACK键等 adb shell input text <文本>                 # 输入指定文本 
adb shell input tap x y                     # 在屏幕上单击指定坐标 
adb shell input swipe x1 y1 x2 y2             # 在屏幕上滑动,从(x1,y1)到(x2,y2)

文件操作

adb pull <设备路径> <本地路径>               # 从设备复制文件到本地计算机 
adb push <本地路径> <设备路径>               # 将本地文件复制到设备上 
adb shell ls <目录>                           # 列出指定目录下的所有文件和子目录 
adb shell rm <文件/目录>                     # 删除指定文件或目录 
adb shell mkdir <目录>                       # 创建指定目录

系统操作

adb reboot               # 重启设备 
adb reboot bootloader     # 进入设备的bootloader模式 
adb root                 # 尝试以root权限运行
adb shell adb remount               # 重新挂载/system分区,使其可写 
adb logcat               # 查看设备日志

adb logcat操作

  1. 输出所有日志:

    adb logcat
    
  2. 输出指定级别以上的日志:(级别从低到高为 V、D、I、W、E、F)

    adb logcat <级别>:*
    
  3. 输出指定标签的日志:

    adb logcat -s <标签>
    
  4. 输出包含特定关键字的日志:

    adb logcat | grep <关键字>
    
  5. 显示时间戳和进程ID:

    adb logcat -v time
    
  6. 保存日志到文件:

    adb logcat -d > <文件名>.txt
    
  7. 清除缓存并输出当前日志:

    adb logcat -c && adb logcat
    

adb shell命令列表:

  1. 运行命令

    复制代码adb shell <命令>   # 在设备上运行指定的命令
    
  2. 查看文件系统

    复制代码cd <目录>           # 进入指定目录 
    ls                 # 列出当前目录中的所有文件和子目录
     pwd                 # 显示当前工作目录的路径 
    cat <文件>         # 显示文本文件的内容 
    chmod <权限> <文件> # 更改文件或目录的访问权限 
    rm <文件/目录>     # 删除文件或目录
    
  3. 查看进程和服务

    复制代码ps                   # 列出所有正在运行的进程 
    top                 # 显示活动进程的实时状态 
    service list         # 列出设备上的所有服务 
    dumpsys activity     # 显示当前活动的应用程序和状态信息 
    am start -n <包名>/<启动activity> # 启动指定应用程序 
    am force-stop <包名> # 强制停止指定应用程序
    
  4. 查看网络

    复制代码ping <IP地址>       # 测试与指定IP地址的连接 
    netstat             # 显示网络状态信息 
    ifconfig             # 显示网络接口的信息
    
  5. 其他

    复制代码setprop <属性> <值> # 设置系统属性的值 
    getprop <属性>       # 获取指定系统属性的值 
    screencap <文件路径> # 获取屏幕截图并保存到指定文件中 
    input keyevent <键值> # 发送一个按键事件,如HOME键、BACK键等
    

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要使用 pytest 和 Appium 进行自动化测试,需要按照以下步骤进行安装和配置: 1. 首先,确保你已经在系统上安装了 Python。你可以在官方网站上下载并安装最新版本的 Python。 2. 安装 AppiumAppium 是一个用于移动应用自动化的开源工具。你可以使用以下命令通过 npm(Node.js 包管理器)进行安装: ``` npm install -g appium ``` 或者,你也可以从 Appium 的官方网站上下载并安装 Appium。 3. 安装 Appium Python 客户端。你可以使用以下命令通过 pip(Python 包管理器)进行安装: ``` pip install Appium-Python-Client ``` 4. 创建一个新的 Python 虚拟环境(可选但推荐)。你可以使用以下命令创建并激活虚拟环境: ``` python -m venv myenv # 创建虚拟环境 source myenv/bin/activate # 激活虚拟环境(Windows 用户应执行 activate.bat) ``` 5. 安装 pytest。你可以使用以下命令通过 pip 进行安装: ``` pip install pytest ``` 6. 编写测试脚本。创建一个新的 Python 文件,例如 `test_app.py`,并在其中编写你的测试代码。你可以使用 Appium Python 客户端提供的 API 来与 Appium 进行交互。 7. 运行测试脚本。在终端中,导航到存储测试脚本的目录,然后运行以下命令: ``` pytest test_app.py ``` pytest 将扫描目录中的所有文件,查找以 `test_` 开头的函数或方法,并执行它们作为测试用例。 这样,你就可以使用 pytest 和 Appium 进行自动化测试了。记得在运行测试之前启动 Appium 服务器,并确保你的测试脚本与 Appium 服务器正确连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值