2017-05-11 42 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; 
} 

因爲這樣你就可以確定括號始終是關閉的

希望這個可能有任何幫助。