如何在我的 appium 本机应用程序测试中添加类似 isClickable() 的内容
How to add something like isClickable() in my appium native app tests
如何在我的 appium 本机应用程序测试中添加类似 isClickable() 的内容。我已经编写了我的测试,但是它们非常不稳定并且有时会失败,因为它找不到元素。我正在考虑使用隐式等待时间制作自定义点击和设置值函数。
我考虑过使用 isClickable() 但 appium 文档说 - 请注意 isClickable 仅适用于网络和网络视图,它不适用于移动应用程序本机上下文。
我还有其他选择吗?我可以使用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 否则我的测试会因为按钮不可点击或不可输入而失败。
我的建议是你可以获取你的元素属性 clickable
如果它 true
继续做你的事情
public boolean isClickable(String element) {
return androidDriver.findElementByAccessibilityId(element).getAttribute("clickable").equals("true");
}
您可以使用任何方法找到您的元素。
最好的方法是停止使用隐式等待,并在每个驱动程序 UI 交互之前进行显式等待。
您应该阅读 waitUntil / WebDriverWait(不确定 node.js 实现中是否有)。
然后创建与应用中所有类型的元素进行交互的函数,这些元素在执行前执行显式等待。
伪代码:
get clickButton (Selector element) {
waitUntil(clickable(element),...);
return $(driver.click(element));
}
为应用程序中所有类型的元素(按钮、文本字段、下拉菜单...)编写通用方法,并从驱动程序中删除隐式等待。你会发现你的测试稳定性有很大的不同。
如何在我的 appium 本机应用程序测试中添加类似 isClickable() 的内容。我已经编写了我的测试,但是它们非常不稳定并且有时会失败,因为它找不到元素。我正在考虑使用隐式等待时间制作自定义点击和设置值函数。
我考虑过使用 isClickable() 但 appium 文档说 - 请注意 isClickable 仅适用于网络和网络视图,它不适用于移动应用程序本机上下文。
我还有其他选择吗?我可以使用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 否则我的测试会因为按钮不可点击或不可输入而失败。
我的建议是你可以获取你的元素属性 clickable
如果它 true
继续做你的事情
public boolean isClickable(String element) {
return androidDriver.findElementByAccessibilityId(element).getAttribute("clickable").equals("true");
}
您可以使用任何方法找到您的元素。
最好的方法是停止使用隐式等待,并在每个驱动程序 UI 交互之前进行显式等待。
您应该阅读 waitUntil / WebDriverWait(不确定 node.js 实现中是否有)。
然后创建与应用中所有类型的元素进行交互的函数,这些元素在执行前执行显式等待。
伪代码:
get clickButton (Selector element) {
waitUntil(clickable(element),...);
return $(driver.click(element));
}
为应用程序中所有类型的元素(按钮、文本字段、下拉菜单...)编写通用方法,并从驱动程序中删除隐式等待。你会发现你的测试稳定性有很大的不同。