selenium - 即使我们有很多方法,我们是否应该在 selenium 关键字驱动的框架中拥有一个动作类?
问题描述
根据我的理解,关键字驱动框架是,我们为我们执行的每个操作创建一个关键字,并使用这些关键字在 excel 中编写测试用例。例如,打开浏览器、输入用户名、密码、单击登录按钮等,我们为每个操作创建一个关键字,并为每个关键字创建一个方法,并将所有这些方法存储在一个类中,如 actionmethods() 等。
我们使用java反射类来调用这些方法。
如果我们少了没有。应该没问题的方法。我正在做一个小项目,我得到了大约 200 个关键字。所以我要在这里写200个方法。我应该将所有这些方法存储在一个类中吗?
如果我有 1000 个关键字(对于一个大项目)怎么办?
如果我根据页面创建单独的文件分组关键字方法,它会变得非常复杂。如果我们只使用一个类来保存所有方法,有人可以解释一下吗?
谢谢你。
解决方案
就像我们在页面对象模式中所做的那样,将关键字方法维护为每个页面的单独类。
在调用关键字时,我们可以指定类名以及方法名。例如,LoginPage.login
例如,如果您在包下维护页面类,com.myproject.test.pages
您可以将调用的反射代码更改为,
public Object invokeKeywordMethod(String keywordName)
throws InvocationTargetException, IllegalAccessException, InstantiationException {
String[] keywords = keywordName.split("\\.");
if (keywords.length == 1)
throw new Error("Invalid keyword: " + keywordName + ". The keyword must be as ClassName.methodName");
String className = keywords[0];
String methodName = keywords[1];
Class<?> pageClass = getPageClass(className);
Method method;
try {
method = getPageClass("").getDeclaredMethod(methodName);
} catch (NoSuchMethodException e) {
throw new Error("The keyword method '" + methodName + "' is not found in the class");
}
return method.invoke(pageClass.newInstance());
}
private Class<?> getPageClass(String className) {
Class<?> pageClass = null;
try {
pageClass = Class.forName("com.myproject.test.pages." + className);
} catch (ClassNotFoundException e) {
throw new Error(className + " not found in package 'com.myproject.test.pages' ");
}
return pageClass;
}
推荐阅读
- python - 如何在 Python 中拆分复杂的字符串
- python - python中的迭代文件搜索
- microsoft-translator - 为 Microsoft 自定义翻译文本 JA->EN 预处理训练数据?(标记化,小写)
- android - 我的 MainActivity.kt 文件有什么问题?
- sass - 在 create-react-app 中覆盖 SASS 变量
- java - Spring Data Rest:IllegalArgumentException 的间歇性错误
- python - 从头到尾切片字符串
- angular - 在两个不同的数组中推送相同的数据时,在对象数组中创建重复条目
- c# - 如果 POST 请求中的文件总大小超过 30MB,ASP.NET Core 会抛出 -4077 ECONNRESET
- python - Python 正则表达式与其他正则表达式工具不匹配