我目前正在尝试使用Java和Selenium创建自动化框架。
我想创建一行代码,它本质上可以读取任何输入并使其成为一行可运行代码。例如,在外部文件中,用户可以将“id”发布到字段中,然后该字段将由我的程序读取并执行该行。 driver.findElement(By.id(.......)
目前,我正在使用一堆if语句为每个标识符执行此操作,例如id,cssSelector,Xpath等等,但是我需要对程序.click,.sendKeys等使用的动作做同样的事情,这样程序才会不断扩展,看起来整体非常混乱。
是否有一个解决方案可以让我以更好的方式做到这一点,还是我坚持原来的做法?
答案 0 :(得分:0)
Reflection可能是解决此问题的最直接方法。它本质上允许通过字符串名称查找类和方法。
这是一个fag-packet示例,说明如何使用您提供的代码段来解决此问题,但我建议您在潜入之前阅读一些documentation。
Element findElementReflectively(Driver driver, String elementType, String thingToSearchFor) {
try {
Method m = By.class.getMethod(elementType, String.class);
if(!Modifier.isStatic(m.getModifiers())) {
throw new NoSuchMethodException("'By' method is not static.");
}
return driver.findElement(m.invoke(null, thingToSearchFor));
} catch (IllegalAccessException | NoSuchMethodException e) {
throw new IllegalArgumentException("Unknown element type: " + elementType, e);
} catch (InvocationTargetException e) {
throw new RuntimeException("Failed to find requested element.", e.getCause());
}
}
答案 1 :(得分:0)
这取决于你真正想做的事情。
从文件读取id然后执行代码可以通过配置文件实现:Properties
或者,如果您想要执行完整的输入代码,只需再搜索一下 How to execute console or GUI input as if it was actual Java code?