JavaApp自动化测试系列[v1.0.0][PageFactory注解详解]

package org.davieyang.testscripts;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidElement;
import org.openqa.selenium.Alert;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.FindBys;
import org.openqa.selenium.support.FindAll;


import org.openqa.selenium.remote.RemoteWebElement;
import io.appium.java_client.pagefactory.*;
import io.appium.java_client.ios.IOSElement;


import java.util.List;
import static io.appium.java_client.pagefactory.LocatorGroupStrategy.CHAIN;
import static io.appium.java_client.pagefactory.LocatorGroupStrategy.ALL_POSSIBLE;

public class PageFactoryDemo {

    /**
     * 对于WebElement类型的元素来说,使用FindBy注解
     * WebElement类型的元素指的是浏览器或web view html UI
     * 如果没有在Desired Capability中指定,则也可应用于Mobile Native Application
     */
    @FindBy(locateStrategy)
    WebElement webElement;

    @FindBy(locateStrategy)
    List<WebElement> webElementList;

    /**
     * 在Desired Capability指定了automationName自动化测试引擎,则
     * 对于原生应用native app, 分别使用@AndroidFindBy @iOSXCUITFindBy //@SelendroidFindBy(老版本)
     */
    @AndroidFindBy(locateStrategy)
    AndroidElement androidElement;
    @AndroidFindBy(locateStrategy)
    List<AndroidElement> androidElementList;

    @iOSXCUITFindBy(locateStrategy)
    IOSElement iosElement;
    @iOSXCUITFindBy(locateStrategy)
    List<IOSElement> iosElementList;

    @SelendroidFindBy(locateStrategy)
    RemoteWebElement remoteWebElement;
    @SelendroidFindBy(locateStrategy)
    List<RemoteWebElement> remoteWebElementList;


    /**
     * 跨平台的原生App,需要使用@AndroidFindBy @iOSXCUITFindBy同时进行注解
     */
    @AndroidFindBy(locateStrategy)
    @iOSXCUITFindBy(locateStrategy)
    MobileElement mobileElement;

    @AndroidFindBy(locateStrategy)
    @iOSXCUITFindBy(locateStrategy)
    List<MobileElement> mobileElementList;

    /**
     * 全平台,使用@FindBy @AndroidFindBy @iOSXCUITFindBy 同时进行注解
     */
    @FindBy(locateStrategy)
    @AndroidFindBy(locateStrategy)
    @iOSXCUITFindBy(locateStrategy)
    RemoteWebElement remoteWebElement;

    @FindBy(locateStrategy)
    @AndroidFindBy(locateStrategy)
    @iOSXCUITFindBy(locateStrategy)
    List<RemoteWebElement> remoteWebElementList;

    /**
     * Chained定位方式,使用@FindBys @AndroidFindBys @iOSXCUITFindBys 进行注解,通过多种定位方式找到
     * FindBys相当于在多种定位方式中取交集,例如@FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
     * 相当于首先根据locateStrategy1找到对应元素,然后在这些元素中通过locateStrategy2再次查找元素
     * 这类似于driver.findelement(locateStrategy1).findelement(locateStrategy2)
     */
    // 第一种方式
    @FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
    @AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
    @iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
    RemoteWebElement remoteWebElement;

    @FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
    @AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
    @iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
    List<RemoteWebElement> remoteWebElementList;
    
    
    // 第二种方式
    @HowToUseLocators(androidAutomation = CHAIN, iOSXCUITAutomation = CHAIN)
    @FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
    @AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
    @iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
    RemoteWebElement remoteWebElement;
    
    @HowToUseLocators(androidAutomation = CHAIN, iOSXCUITAutomation = CHAIN)
    @FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
    @AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
    @iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
    List<RemoteWebElement> remoteWebElementList;


    /**
     * Possible方式,这种定位方式使用@FindAll @AndroidFindAll @iOSXCUITFindAll
     * FindAll相当于在多种定位方式中取并集,例如@FindAll({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
     * 相当于取到所有符合locateStrategy1和locateStrategy2的元素
     */
    
    @HowToUseLocators(androidAutomation = ALL_POSSIBLE, iOSXCUITAutomation = ALL_POSSIBLE)
    @FindAll({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
    @AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
    @iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
    RemoteWebElement remoteWebElement;


    @HowToUseLocators(androidAutomation = ALL_POSSIBLE, iOSXCUITAutomation = ALL_POSSIBLE)
    @FindAll({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
    @AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
    @iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
    List<RemoteWebElement> remoteWebElementList;
}

猜你喜欢

转载自blog.csdn.net/dawei_yang000000/article/details/108359805
今日推荐