我正在尝试编写一个Selenium java程序,它将从外部源获取命令。例如我以用户友好的方式外部编写了driver.findElement(By.id("username")).sendKeys("FirstName");
,因此用户可以在不知道后端代码的情况下创建selenium脚本。
将其拆分为4个部分:
1) identifier type e.g. id
2) identifier e.g. "username"
3) command type e.g. sendKeys
4) input data e.g. "Firstname"
在我的代码中,我使用运行时编译器将String编译为代码(我正在这样做,因为我可以将整个代码作为字符串运行)这样我可以使用一小段代码来运行引用的任何内容在外部源代码中,只要正确创建外部源代码,此代码就可以用于sendKeys,单击等等,而无需任何更改。
我可以运行
`" String URL2 = \"id\";" + "\n" +
" String URL3 = \"username\";" + "\n" +
" String URL4 = \"sendKeys\";" + "\n" +
" String URL5 = \"Grabhamn\";" + "\n" +
" System.out.println(\"driver.findElement(By.\"+URL2+\"
(\"+URL3+\")).\"+URL4+\"(\"+URL5+\");\");" + "\n" +`
这会输出driver.findElement(By.id(username)).sendKeys(Grabhamn);
但我的问题是如何在运行时编译器中执行此代码。另外,我需要输出代码作为
driver.findElement(By.id("username")).sendKeys("Grabhamn");
在这些地方包含引号,因为我也没有成功。
非常感谢有关如何执行此操作或替代解决方案的任何信息。
答案 0 :(得分:0)
我不确定我是否正确理解了你的问题,不知道你是否已经成功完成了你的任务,因为这是很久以前的事了。但对于后代我会建议 a)使用StringBuilder创建代码 - 建议用于生成大量文本; b)使用字符添加“s
因此,我会尝试执行以下操作:
StringBuilder sb = new StringBuilder();
sb.append("driver.findByElement(By.");
sb.append(URL2);
sb.append('(');
sb.append('"');
sb.append(URL3);
sb.append('"');
...
System.out.plintln(sb.toString);
等
充其量,我有一个功能
String parentheses(Object o){
StringBuilder sb = new StringBuilder();
sb.append('"');
sb.append(o.toString());
sb.append('"');
return sb.tostring;
}
因为这样你就可以确定括号总是关闭的。
希望这可能有所帮助。