操作代码 - 编辑和运行代码

时间:2017-05-11 15:33:23

标签: java selenium runtime-compilation

我正在尝试编写一个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");在这些地方包含引号,因为我也没有成功。

非常感谢有关如何执行此操作或替代解决方案的任何信息。

1 个答案:

答案 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;
}

因为这样你就可以确定括号总是关闭的。

希望这可能有所帮助。