如何在我的appium本机应用程序测试中添加类似于isClickable()的东西

问题描述 投票:1回答:2

如何在我的Appium本机应用程序测试中添加类似于isClickable()的内容。我已经编写了测试,但是它们非常脆弱,有时会因为找不到元素而失败。我正在考虑使用隐式等待时间进行自定义单击和设置值功能。

我曾考虑过使用isClickable(),但appium文档说-请注意,isClickable仅适用于Web和Web视图,不适用于移动应用程序本机上下文。

我还有其他选择吗?我可以使用smartwait吗?如果是,我该如何实施

这是我如何定义home.screen.js

import AppScreen from './app.screen';

const SELECTORS = {
    HOME_SCREEN: '~homeBarButton',
    PRODUCTSEARCH_SCREEN: '~productSearchBarButton',
    CUSTOMERSEARCH_SCREEN: '~customersBarButton',
    STOREHUB_SCREEN: '~storeHubBarButton',
    SETTING_ICON: '~SettingsIcon',
    LOGOUT_BUTTON: '~settingsMainLogoutButton'
};

class HomeScreen extends AppScreen {
    constructor () {
        super(SELECTORS.HOME_SCREEN);
    }

    get homescreenButton () {
        return $(SELECTORS.HOME_SCREEN);
    }

    get productsearchField () {
        return $(SELECTORS.PRODUCTSEARCH_SCREEN);
    }

    get customersearchButon () {
        return $(SELECTORS.CUSTOMERSEARCH_SCREEN);
    }

    get storehubButon () {
        return $(SELECTORS.STOREHUB_SCREEN);
    }

    get settingIcon () {
        return $(SELECTORS.SETTING_ICON);
    }

    get logoutButton () {
        return $(SELECTORS.LOGOUT_BUTTON);
    }
}

export default new HomeScreen();

而且我正在像这样test.js编写我的测试:

import HomeScreen from '../screenobjects/home.screen';
import FormScreen from '../screenobjects/forms.screen';
import CommonPage from '../pageobjects/common.page';

describe('Sending item successfullt,', () => {

    beforeEach(() => {
        CommonPage.login()
    });

    afterEach(() => {
        CommonPage.logout()
    });

    it('should be able to send the item to the mirror', () => {
        driver.pause(3000)
        HomeScreen.productsearchField.click();
        driver.pause(3000)
        HomeScreen.customersearchButon.click();

    });


});

正如您在上面看到的,我必须添加driver.pause,否则我的测试将由于按钮不可点击或无法键入而失败。

appium wait implicit webdriver-io
2个回答
1
投票

最佳方法是停止使用隐式等待,并在每次驱动程序UI交互之前执行显式等待。

您应该对waitUntil / WebDriverWait进行一些阅读(不确定在node.js实现中是否有此内容。

然后在应用程序中创建用于与应用程序中所有类型的元素进行交互的函数,这些元素将在执行之前执行明确的等待。

伪代码:

get clickButton (Selector element) {
        waitUntil(clickable(element),...);
        return $(driver.click(element));
    }

为应用程序中所有类型的元素(按钮,文本字段,下拉列表...编写通用方法,并从驱动程序中删除隐式等待。您会发现测试稳定性有很大的不同。


3
投票

我的建议是,您可以获取元素属性clickable,并且如果其true继续执行您的操作

public boolean isClickable(String element) {
        return androidDriver.findElementByAccessibilityId(element).getAttribute("clickable").equals("true");
    }

您可以使用任何方法来查找您的元素。

© www.soinside.com 2019 - 2024. All rights reserved.