自动化框架Quantum Automation Framework (JAVA,Appium,TestNG,QAF) + cucumber + perfecto (mobile) 自动化框架Quantum Automation Framework (JAVA,Appium,TestNG,QAF) + cucumber + perfecto (web)

一些框架进本设置和信息,请参照我上一篇关于web测试的文章

自动化框架Quantum Automation Framework (JAVA,Appium,TestNG,QAF) + cucumber + perfecto (web)

https://blog.csdn.net/leonlee85/article/details/80892401

仅以此作为学习笔记分享,描述理解有错误欢迎指正。(转载请注明出处)

1. mobile test suit 参数设置

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Appium Demo Suite" verbose="0" parallel="tests">
    <listeners>
        <listener class-name="com.quantum.listeners.QuantumReportiumListener"/>
    </listeners>

    <!-- To use actual AppiumDriver classes defined    -->
    <!-- by driverClass property in env.resources dirs -->
    <!-- Set driver.name value to perfectoDriver       -->
    <parameter name="driver.name" value="appiumDriver"/>
    <parameter name="remote.server" value="http://0.0.0.0:4723/wd/hub"></parameter>
    <parameter name="remote.port" value="4723"></parameter>

    <test name="Android demoApp Test" enabled="true">
        <parameter name="appium.capabilities.platformName" value="Android"></parameter>
        <parameter name="appium.capabilities.deviceName" value="127.0.0.1:62025"></parameter>
        <parameter name="appium.capabilities.app" value="C:/Python27/Scripts/testprojects/demoapp/ApiDemos-debug.apk"></parameter>
        <parameter name="appium.capabilities.automationName" value="Appium"></parameter>
        <parameter name="appium.capabilities.appPackage" value="io.appium.android.apis"></parameter>
        <parameter name="appium.capabilities.appActivity" value="ApiDemos"></parameter>
        <parameter name="appium.capabilities.noReset" value="true"></parameter>
        <parameter name="env.resources" value="src/main/resources/android"/>

        <groups>
            <run>
                <include name="@demoApp"/>
            </run>
        </groups>
        <classes>
            <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory"/>
        </classes>
    </test>
</suite>

在test下的众多parameter设置,也可以写在另外的文件中,通过如下参数导入 

 <parameter name="env.resources" value="src/main/resources/android"/>

这样能让文件看起来更简洁,便于维护

src/main/resources/android下的env.properties文件里

perfecto.capabilities.platformName=android
perfecto.capabilities.applicationName=Calculator
driver.capabilities.driverClass=io.appium.java_client.android.AndroidDriver

注意最后一个参数,如果测试安卓请务必设置这个参数为AndroidDriver, 如果是IOS程序设置为IosDriver

这个两个类都是继承了appiumDriver类,可以直接使用appium封装的方法,但是对于要模拟安卓按键操作,需要使用AndroidDriver里的pressKeyCode方法。这里不修改的话在程序里去获取到AndroidDriver对象是会报错的,提示appiumdriver 和 androiddriver类不能相互转换。

2. 编写test步骤

@demoApp
Feature: Appium demoApp Example Feature
  #Sample Test Scenario Description

  @demoApp
  Scenario: Appium Example
    Given I start application by name "API Demos"
    And I am using an AppiumDriver
    When I wait for "2" seconds
    Then I will see "NFC" in screen
    When I click on button "App"
    And I will see "Action Bar" in screen
    Then I click on button "Loader"
    And I wait for "5" seconds
    Then I will go back to pre-screen
    And I wait for "2" seconds

3. 定义步骤方法,同样一些公共参数可以写在src/main/resources/android下的**.loc文件里面,通过<parameter>标签导入

package com.quantum.steps;

import com.qmetry.qaf.automation.step.QAFTestStep;
import com.qmetry.qaf.automation.step.QAFTestStepProvider;
import com.qmetry.qaf.automation.ui.WebDriverTestBase;
import com.qmetry.qaf.automation.ui.webdriver.QAFExtendedWebElement;
import com.qmetry.qaf.automation.util.StringUtil;
import com.quantum.utils.AppiumUtils;
import com.quantum.utils.ConfigurationUtils;
import com.quantum.utils.ConsoleUtils;
import com.quantum.utils.DriverUtils;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import cucumber.api.java.en.And;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidKeyCode;
import io.appium.java_client.ios.IOSDriver;
import org.openqa.selenium.By;

/**
 * @author LeonLi
 *
 */
@QAFTestStepProvider
public class DemoAppStepDefs {

    @QAFTestStep(description = "I start application by name {0}")
    public void iStartApplicationByName(String str0){

    }

    @Then("I will see \"(.+)\" in screen")
    public void iWillSeeInTitleBar(String text){
        new QAFExtendedWebElement(By.xpath("//android.widget.TextView[@content-desc=\"" + text + "\"]")).verifyText(text);
    }

    @When("I click on button \"(.*?)\"")
    public void iClickOnButton(String btn){
        DriverUtils.getAndroidDriver().findElementByXPath("//android.widget.TextView" +
                "[@content-desc=\"" + btn + "\"]").click();
    }

    @And("I am using an AppiumDriver")
    public void testForAppiumDriver() {
        if (ConfigurationUtils.getBaseBundle().getPropertyValue("driver.name").contains("Remote"))
            ConsoleUtils.logWarningBlocks("Driver is an instance of QAFExtendedWebDriver");
        else if (AppiumUtils.getAppiumDriver() instanceof IOSDriver)
            ConsoleUtils.logWarningBlocks("Driver is an instance of IOSDriver");
        else if (AppiumUtils.getAppiumDriver() instanceof AndroidDriver)
            ConsoleUtils.logWarningBlocks("Driver is an instance of AndroidDriver");
    }

    @When("I will go back to pre-screen")
    public void iWillGoBackToPreScreen(){
        DriverUtils.getAndroidDriver().pressKeyCode(AndroidKeyCode.BACK);
    }
}

一切准备好后,打开模拟器,运行appium server,运行test case。

强烈推荐appium server 1.8.1,设置简单,可以通过UI界面直接启动模拟器上的软件,实时同步,自带控件的inspector.

需要了解appium server和模拟器之间设置可以参考我的这篇微博https://blog.csdn.net/leonlee85/article/details/80878164





猜你喜欢

转载自blog.csdn.net/LeonLee85/article/details/80934347