如何在我的appium本机应用程序测试中添加类似isClickable()的内容
如何在我的appium本机应用程序测试中添加类似isClickable()的内容。我已经写了我的测试,但是它们非常脆弱,有时会因为找不到元素而失败。我正在考虑使用隐式等待时间来定制单击和设置值函数 我曾考虑过使用isClickable(),但appium文档中说-请注意,isClickable仅在web和WebView中有效,在移动应用程序本机上下文中不起作用 我还有别的选择吗?我可以用smartwait吗?如果是,我如何实施 下面是我如何定义home.screen.js的如何在我的appium本机应用程序测试中添加类似isClickable()的内容,appium,wait,implicit,webdriver-io,Appium,Wait,Implicit,Webdriver Io,如何在我的appium本机应用程序测试中添加类似isClickable()的内容。我已经写了我的测试,但是它们非常脆弱,有时会因为找不到元素而失败。我正在考虑使用隐式等待时间来定制单击和设置值函数 我曾考虑过使用isClickable(),但appium文档中说-请注意,isClickable仅在web和WebView中有效,在移动应用程序本机上下文中不起作用 我还有别的选择吗?我可以用smartwait吗?如果是,我如何实施 下面是我如何定义home.screen.js的 import App
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();
});
});
正如您在上面看到的,我必须添加驱动程序。暂停,否则我的测试将失败,因为按钮不可单击或不可键入。我的建议是,您可以获得元素属性
可单击
,如果它为真
,请继续执行您的操作
public boolean isClickable(String element) {
return androidDriver.findElementByAccessibilityId(element).getAttribute("clickable").equals("true");
}
您可以使用任何方法查找您的元素。我的建议是,您可以获取元素属性
可单击,如果它为真
,请继续执行您的操作
public boolean isClickable(String element) {
return androidDriver.findElementByAccessibilityId(element).getAttribute("clickable").equals("true");
}
您可以使用任何方法查找元素。最好的方法是停止使用隐式等待,并在每个驱动程序UI交互之前执行显式等待
您应该阅读一下/WebDriverWait(不确定node.js实现中是否有)
然后创建与应用程序中所有类型的元素交互的函数,这些元素在执行之前执行显式等待
伪代码:
get clickButton (Selector element) {
waitUntil(clickable(element),...);
return $(driver.click(element));
}
为应用程序中所有类型的元素(按钮、文本字段、下拉列表…)编写通用方法,并从驱动程序中删除隐式等待。您将看到测试稳定性方面的巨大差异。最好的方法是停止使用隐式等待,并在每个驱动程序UI交互之前执行显式等待
您应该阅读一下/WebDriverWait(不确定node.js实现中是否有)
然后创建与应用程序中所有类型的元素交互的函数,这些元素在执行之前执行显式等待
伪代码:
get clickButton (Selector element) {
waitUntil(clickable(element),...);
return $(driver.click(element));
}
为应用程序中所有类型的元素(按钮、文本字段、下拉列表…)编写通用方法,并从驱动程序中删除隐式等待。您将看到测试稳定性方面的巨大差异。欢迎使用Stackoverflow。请提供您的代码,以便其他人容易理解。我可以提供一些示例,但使用Java。你想要吗?@Vault23你可以输入,我会检查它,然后返回Stackoverflow。请提供您的代码,以便其他人容易理解。我可以提供一些示例,但使用Java。你想要吗?@Vault23你可以输入,我会检查的,会有帮助的