bootstrapのWake&&PressBack&&TakeScreenshot&&OpenNotification

4862 ワード

Wake

package io.appium.android.bootstrap.handler;

import android.os.RemoteException;
import com.android.uiautomator.core.UiDevice;
import io.appium.android.bootstrap.AndroidCommand;
import io.appium.android.bootstrap.AndroidCommandResult;
import io.appium.android.bootstrap.CommandHandler;

/**
 * This handler is used to power on the device if it's not currently awake.
 * 
 */
public class Wake extends CommandHandler {

  /*
   * @param command The {@link AndroidCommand} used for this handler.
   * 
   * @return {@link AndroidCommandResult}
   * 
   * @throws JSONException
   * 
   * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android.
   * bootstrap.AndroidCommand)
   */
  @Override
  public AndroidCommandResult execute(final AndroidCommand command) {
    // only makes sense on a device
    try {
      UiDevice.getInstance().wakeUp();
      return getSuccessResult(true);
    } catch (final RemoteException e) {
      return getErrorResult("Error waking up device");
    }
  }
}

wakeイベントは携帯電話を呼び覚ますため、携帯電話が睡眠状態にある場合は画面を点灯する必要があり、画面が点灯している場合は、何の操作もしません.

PressBack

package io.appium.android.bootstrap.handler;

import com.android.uiautomator.core.UiDevice;
import io.appium.android.bootstrap.AndroidCommand;
import io.appium.android.bootstrap.AndroidCommandResult;
import io.appium.android.bootstrap.CommandHandler;

/**
 * This handler is used to press back.
 * 
 */
public class PressBack extends CommandHandler {

  /*
   * @param command The {@link AndroidCommand} used for this handler.
   * 
   * @return {@link AndroidCommandResult}
   * 
   * @throws JSONException
   * 
   * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android.
   * bootstrap.AndroidCommand)
   */
  @Override
  public AndroidCommandResult execute(final AndroidCommand command) {
    UiDevice.getInstance().pressBack();
    // Press back returns false even when back was successfully pressed.
    // Always return true.
    return getSuccessResult(true);
  }
}

携帯電話の戻りボタン.

TakeScreenshot

package io.appium.android.bootstrap.handler;

import com.android.uiautomator.core.UiDevice;
import io.appium.android.bootstrap.AndroidCommand;
import io.appium.android.bootstrap.AndroidCommandResult;
import io.appium.android.bootstrap.CommandHandler;

import java.io.File;

/**
 * This handler is used to TakeScreenshot.
 * 
 */
public class TakeScreenshot extends CommandHandler {

  /*
   * @param command The {@link AndroidCommand} used for this handler.
   * 
   * @return {@link AndroidCommandResult}
   * 
   * @throws JSONException
   * 
   * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android.
   * bootstrap.AndroidCommand)
   */
  @Override
  public AndroidCommandResult execute(final AndroidCommand command) {
    final File screenshot = new File("/data/local/tmp/screenshot.png");

    try {
      screenshot.getParentFile().mkdirs();
    } catch (final Exception e) {
    }

    if (screenshot.exists()) {
      screenshot.delete();
    }

    UiDevice.getInstance().takeScreenshot(screenshot);
    return getSuccessResult(screenshot.exists());
  }
}

スクリーンを切り、/data/local/tmpパスの下のscreenshot.に画像を保存します.pngファイルにあります.

OpenNotification

package io.appium.android.bootstrap.handler;

import com.android.uiautomator.core.UiDevice;
import io.appium.android.bootstrap.AndroidCommand;
import io.appium.android.bootstrap.AndroidCommandResult;
import io.appium.android.bootstrap.CommandHandler;

import static io.appium.android.bootstrap.utils.API.API_18;

/**
 * This handler is used to open the notification shade on the device.
 *
 */
public class OpenNotification extends CommandHandler {

  /*
   * @param command The {@link AndroidCommand} used for this handler.
   *
   * @return {@link AndroidCommandResult}
   *
   * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android.
   * bootstrap.AndroidCommand)
   */
  @Override
  public AndroidCommandResult execute(final AndroidCommand command) {
    // method was only introduced in API Level 18
    if (!API_18) {
      return getErrorResult("Unable to open notifications on device below API level 18");
    }

    // does not make sense on an element
    if (command.isElementCommand()) {
      return getErrorResult("Unable to open notifications on an element.");
    }

    final UiDevice device = UiDevice.getInstance();
    if (device.openNotification()) {
      return getSuccessResult(true);
    } else {
      return getErrorResult("Device failed to open notifications.");
    }
  }
}

通知欄操作を開き、api 18以降UiDeviceにopenNotification()メソッドを追加し、通知欄を開きます.このイベントは、メソッドを呼び出すことです.