appium录制脚本和回放

2020-03-11  本文已影响0人  testerPM

--------------------------------------------如何录制脚本-------------------------------

步骤如下:
(1) 点击录制按钮


image.png

(2)点击 【选择元素】按钮


image.png

(3)选择 我的柠檬-》右边点击


image.png
image.png

(4)选择头像-》右边点击


image.png

(5)点击 用户名 -》点击 发送密钥 -》输入用户名
(6)点击 密码-》点击 发送密钥-》输入密码
(7) 选 登录元素-》右边点击 【点击】
(8)再次点击录制,即停止录制

如何查看全部的录制脚本


image.png

上图点击右上角,可以看到全部的脚本,全部脚本如下:

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SampleTest {

  private AndroidDriver driver;

  @Before
  public void setUp() throws MalformedURLException {
    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
    desiredCapabilities.setCapability("platformName", "Android");
    desiredCapabilities.setCapability("appPackage", "com.lemon.lemonban");
    desiredCapabilities.setCapability("appActivity", "com.lemon.lemonban.activity.WelcomeActivity");

    URL remoteUrl = new URL("http://localhost:4723/wd/hub");

    driver = new AndroidDriver(remoteUrl, desiredCapabilities);
  }

  @Test
  public void sampleTest() {
    MobileElement el1 = (MobileElement) driver.findElementByXPath("//android.widget.FrameLayout[@content-desc=\"我的柠檬\"]/android.widget.ImageView");
    el1.click();
    MobileElement el2 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/fragment_my_lemon_avatar_title");
    el2.click();
    MobileElement el3 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/et_mobile");
    el3.sendKeys("13323234545");
    MobileElement el4 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/et_password");
    el4.sendKeys("123456");
    MobileElement el5 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/btn_login");
    el5.click();
  }

  @After
  public void tearDown() {
    driver.quit();
  }
}


-----------------------------------------------------如何回放脚本---------------------------------------

把上面的代码copy到eclispe执行,代码copy过去,发现有报错->这是因为需要导入依赖

image.png

第一个依赖:java_client


image.png

第二个依赖:Junit


image.png

pom引入依赖之后,代码就不报错了,然后可以运行脚本,看一下效果-》

录制脚本改造如下(就引入了2个包,其他未做修改)

package com.lemon.day01;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;

public class RecordTestShell {

    private AndroidDriver driver;

    @Before
    public void setUp() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("appPackage", "com.lemon.lemonban");
        desiredCapabilities.setCapability("appActivity", "com.lemon.lemonban.activity.WelcomeActivity");

        URL remoteUrl = new URL("http://localhost:4723/wd/hub");

        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
    }

    @Test
    public void sampleTest() {
        MobileElement el1 = (MobileElement) driver
                .findElementByXPath("//android.widget.FrameLayout[@content-desc=\"我的柠檬\"]/android.widget.ImageView");
        el1.click();
        MobileElement el2 = (MobileElement) driver
                .findElementById("com.lemon.lemonban:id/fragment_my_lemon_avatar_title");
        el2.click();
        MobileElement el3 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/et_mobile");
        el3.sendKeys("13323234545");
        MobileElement el4 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/et_password");
        el4.sendKeys("123456");
        MobileElement el5 = (MobileElement) driver.findElementById("com.lemon.lemonban:id/btn_login");
        el5.click();
    }

    @After
    public void tearDown() {
        driver.quit();
    }

}


右键 Run as ->JUnit Test (因为脚本里用到的是Junit注解),运行发现脚本报错了


image.png

这是因为app启动是需要一定时间的,而代码却执行很快-》所以需要加等待(所以录制的脚本不一定可以直接拿过来使用,还是需要进行优化的),优化的部分如下:


image.png

再重新执行脚本(RecordTestShell.java),成功执行。但是上述脚本中是没有断言的,没有断言的脚本是没有灵魂的

注意:
(1)eclipse执行脚本,夜神模拟器一定要打开,如下图即可


image.png

(2)adb connect 要连接上设备

image.png

(3)appium要启动(可以不用打开会话器),如下图即可

image.png

----------------------------------------Junit切换成Testng--------------------------------------

(1)pom依赖换成testng

image.png

(2)代码中的注解换成Testng的

image.png

(3)再Run as ->Testng test ,可以执行成功

总结:
(1)脚本的录制:使用appium检查器会话进行录制(可以录制java,也可以录制python)


image.png

(2)脚本回放(appium没有回放的功能,需要使用其他的工具,如eclipse):
1)复制录制的脚本
2) 脚本改后缀名.java
3)eclipse创建maven工程,复制java文件到工程当中
4)pom文件引入依赖,1.java-client 2.junit
(3) java-client引入不需要引入selenium

因为:引入java-client.jar(带有selenium-java.java,这里的版本是3.12.0)


image.png

java_client包 Compile Dependencies(编译依赖如下图:)


image.png image.png (4)到这里讲到的都是appium的简单模式 image.png

下面开始看一下appium的高级设置

-----------------------------------appium的高级设置------------------------------

日志文件路径:appium服务启动时会有很多日志输出,如果你想将日志保存到一个文件了,在这里就可以设置
日志级别:根据设置的日志级别打印日志,比如设置debug,则会将debug级别以上的日志都会输出出来的
覆盖会话:比如你已经启动了一个会话,这时你又启动了第二个会话,如果勾选了这一项,第一个会话就会被停掉,而只启动第二个会话

记录时间戳:勾选,日志就会有时间戳


image.png

不勾选,日志就没有时间


image.png

禁用协议颜色:此项勾选,打印的日志协议紫色就是黑白显示

Android启动端口:


image.png image.png

Selenderoid端口:已不用了,因为这个端口是只针对安卓4.2以下的版本用到的技术
现在安卓版本都已经5.0以上了

Chromediver端口:app有些页面是web页面,如微信里面的微信公众号,文章,新闻

一般能用浏览器访问的页面,都是b/s架构的web页面,当你需要做app内置的web页面自动化,就需要这是Chromediver端口 以及Chromediver驱动路径 image.png

预设:


image.png
上一篇下一篇

猜你喜欢

热点阅读