如何在我的appium本机应用程序测试中添加类似isClickable((的东西。我已经编写了我的测试,但是它们非常不稳定,有时会失败,因为它找不到元素。我正在考虑使用隐式等待时间进行自定义单击和设置值函数。
我想过使用 isClickable((,但 appium 文档说 - 请注意,isClickable 仅适用于 Web 和 Web 视图,它不适用于移动应用程序本机上下文。
还有其他我可以使用的替代方案吗? 我可以使用智能等待吗? 如果是,我该如何实现
以下是我如何定义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();
我正在像这个测试一样编写我的测试.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,否则我的测试将因按钮不可单击或键入而失败。
我的建议是你可以让你的元素属性clickable
,如果它true
继续做你的事情
public boolean isClickable(String element) {
return androidDriver.findElementByAccessibilityId(element).getAttribute("clickable").equals("true");
}
您可以使用任何方法来查找元素。
最佳方法是停止使用隐式等待,并在每次驱动程序 UI 交互之前执行显式等待。
你应该在waittill/WebDriverWait上做一些阅读(不确定你在node.js实现中是否有(。
然后创建函数,用于与应用中所有类型的元素进行交互,这些元素在执行前执行显式等待。
伪代码:
get clickButton (Selector element) {
waitUntil(clickable(element),...);
return $(driver.click(element));
}
为应用中所有类型的元素(按钮、文本字段、下拉列表等(编写通用方法,并从驱动程序中删除隐式等待。您将看到测试稳定性的巨大差异。