2017-05-11 45 views
0

我正在尝试编写一个Selenium Java程序,它将从外部源获取命令。例如我以一种用户友好的方式在外部编写driver.findElement(By.id("username")).sendKeys("FirstName");,因此用户可以在不知道后端代码的情况下创建硒脚本。操纵代码 - 编辑和运行代码

分裂它分为4个部分:

1) identifier type e.g. id 
2) identifier e.g. "username" 
3) command type e.g. sendKeys 
4) input data e.g. "Firstname" 

在我的代码我使用的是运行时编译器编译字符串为代码(我这样做是因为它运行我可以操控整个代码串)这样我可以有一小段代码来运行外部源中引用的任何东西,所以只要正确创建了外部源,此代码就可以用于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

Java脚本API可能适合。 –

回答

0

我不确定我是否正确地理解了你的问题不知道,以及你是否已经完成了你的任务,因为这是很久以前的事了。但对于后代,我会建议 a)使用StringBuilder创建您的代码 - 这是建议用于大块生成的文本;使用字符加“S

因此 b)中,我想尝试做如下:

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

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

希望这个可能有任何帮助。