0

我已经设置了我的 AppiumDriver 自动化类并尝试了简单的测试,例如测试并行、识别 MobileElements 和一般的滑动命令正在工作。通过扭结工作,我收到一条错误消息,指出我将 MobileElement 初始化为网页类的一部分,例如 Chrome 浏览器上的 Google 主页。即使我选择的 id 下面的 className 是正确的,我也没有得到这样的元素。在我的 Appium Server 中,它试图通过 className (android.widget.EditText) 进行查找,但找不到。我试过那个类和“.//android.widget.EditText”,但没有运气。

我会使用按名称搜索,但它没有给我很多选择。我什至尝试做一个 WebElements 列表,但它的大小不大于零。

这是我的页面对象类:

页面对象:

public class PageObject {
    public AppiumDriver<MobileElement> driver;
    protected WebDriverWait wait;
    Dimension size;


    public PageObject(AppiumDriver<MobileElement> driver){
        this.driver = driver;
        wait = new WebDriverWait(driver, 15);

        PageFactory.initElements(new AppiumFieldDecorator(driver), this);
    }

    @SuppressWarnings("rawtypes")
    public  void  swipeVertical  (double startPercentage, double finalPercentage, int duration) {
        size = driver.manage().window().getSize();
        int width = (int) (size.width/2);
        int startPoint = (int) (size.getHeight() * startPercentage);
        int endPoint = (int) (size.getHeight() * finalPercentage);
        new TouchAction(driver)
            .press(PointOption.point(width, startPoint))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(duration)))
            .moveTo(PointOption.point(width, endPoint))
            .release()
            .perform();
    } 

    @SuppressWarnings("rawtypes")
    public void swipeHorizontal (double startPercentage, double finalPercentage, int duration) {
        size = driver.manage().window().getSize();
        int height = (int) (size.height/2);
        int startPoint = (int) (size.getWidth() * startPercentage);
        int endPoint = (int) (size.getWidth() * finalPercentage);
        new TouchAction(driver)
            .press(PointOption.point(startPoint, height))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(duration)))
            .moveTo(PointOption.point(endPoint, height))
            .release()
            .perform();
    }

(更新,这次不使用 PageFactory 方法):GoogleMainPage:

public class GoogleMainPage extends PageObject {

    //@AndroidFindBy(id="com.android.chrome:id/tsf")
    private MobileElement searchSection = driver.findElement(By.id("main"));

    //@AndroidFindBy(id="com.android.chrome:id/tophf")
    //private MobileElement searchCategories;


    public GoogleMainPage(AppiumDriver<MobileElement> driver) {
        super(driver);


    }

    public void searchQuery(String query) {

        MobileElement searchText = searchSection.findElement(By.className(".//android.widget.EditText"));
        MobileElement confirmSearch = searchSection.findElement(By.name("Google Search"));
        searchText.click();
        searchText.sendKeys(query);
        confirmSearch.click();
    }

}

在设置驱动程序/驱动程序后,我正在执行测试的类(generalWait() 只是一个线程睡眠方法):

@Test
    public void testActivation() {
        assertTrue(driver != null);

        pageObject = new PageObject(TLDriverFactory.getTLDriver());
        pageObject.driver.get("https://www.google.com");
        System.out.println(pageObject.driver.getCurrentUrl());
        assertTrue(pageObject.driver.getCurrentUrl().equals("https://www.google.com/"));

        try {generalWait(8000);} catch (InterruptedException e) {e.printStackTrace();}

        GoogleMainPage googleMainPage = new GoogleMainPage(TLDriverFactory.getTLDriver());

        googleMainPage.searchQuery("star wars");

        GoogleSearchResultsPage resultsPage = new GoogleSearchResultsPage(TLDriverFactory.getTLDriver());

        resultsPage.swipeVertical(0.20, 0.80, 2000);
    }

我目前正在使用 Maven 运行它,io.appium java 客户端是 6.1.0。

设置时我缺少什么吗?如果您需要更多信息,请告诉我。

4

1 回答 1

0

在对在网页浏览器上使用 Appium 查找元素进行了更多研究之后,如果您要通过其元素测试的网页具有桌面版本(并且尚未切换到非 webview 上下文),则桌面布局优先于移动版网页。

您必须考虑的另一半是查看移动网页版本的页面源,以防 AppiumDriver 找不到桌面元素。您可以使用driver.getPageSource(). 现在我的 GoogleMainPage 类在输入一些文本并选择 Google 搜索按钮时工作

public class GoogleMainPage extends PageObject {

    private MobileElement searchSection = driver.findElement(By.id("tsf"));

    public GoogleMainPage(AppiumDriver<MobileElement> driver) {
        super(driver);

    }

    public void searchQuery(String query) {

        MobileElement searchText = searchSection.findElement(By.name("q"));
        MobileElement confirmSearch = searchSection.findElement(By.className("Tg7LZd")); 
        searchText.click();
        searchText.sendKeys(query);
        confirmSearch.click();
    }

}
于 2018-11-22T05:05:48.960 回答