2014-09-20 134 views
0

我試圖使用eval函數在硒中創建驅動程序對象。但是出現錯誤 - 「ReferenceError:」FirefoxDriver「未定義」。在行 - 「Object objBrow = objJSEngine.eval(strTxt);」使用eval函數在Selenium中創建驅動程序對象

因爲我想最終將屬性文件中的字符串驅動程序類型。以下是代碼。 任何人都可以幫助我解決這個問題。謝謝。

package septmeber; 
import java.util.concurrent.TimeUnit; 
import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Initial { 

public static void main(String arrParm[]) throws ScriptException 
{ 
    //Declare Variables 
    String strClassName; 
    By objBYTwiter; 
    WebElement objTwitterTag; 
    String strBorwserType; 
    String strTxt; 
    String strURL; 

    objBYTwiter = null; 
    objTwitterTag = null; 
    strClassName = "span[class = 'at16nc at300bs at15nc at15t_twitter at16t_twitter']"; 
    strBorwserType = "FirefoxDriver"; 
    strURL = "http://www.tutorialspoint.com/java/java_enumeration_interface.htm"; 

    //Create Driver object 
    ScriptEngineManager objManager = new ScriptEngineManager(); 
    ScriptEngine objJSEngine = objManager.getEngineByName("js");  
    strTxt = "new"+"\t "+strBorwserType+"();" ; 
    Object objBrow = objJSEngine.eval(strTxt); 
    WebDriver objBrowser = (WebDriver)objBrow; 

    //Launch the application 
    objBrowser.get(strURL); 
    objBrowser.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);   
    System.out.println("Application launched"); 
    objBrowser.manage().window().maximize(); 

    //Click Twitter Link 
    objBYTwiter = By.cssSelector(strClassName); 
    objTwitterTag = objBrowser.findElement(objBYTwiter); 
    objTwitterTag.click();  

    } 

}

+0

'ScriptEngineManager'與Selenium完全無關,所以這就是爲什麼你會收到這些錯誤。你究竟在做什麼? – Arran 2014-09-21 08:16:41

+0

要在運行時評估表達式(lik - 3 * 5 + 5或x = y),我們可以使用ScriptEngineManager中提供的eval函數。我的問題是我們可以使用相同的概念在運行時創建對象嗎? – user1925406 2014-09-21 11:24:21

+0

這就是創建對象的例子 - new FireFoxDriver(); 我們可以這樣做 - obj.eva(「new」+「/ t」+「FireFoxDriver」+「();」) 這樣我就可以在運行時通過串聯一個變量來替換驅動程序名稱。 – user1925406 2014-09-21 11:28:18

回答

0

你所要求是不可能的。

您可以創建一個方法是這樣的:

WebDriver selenium; 

public void setSelenium(String driver) { 

    if (driver.equals("firefox")) { 
     selenium = new FirefoxDriver(); 
    } else if (driver.equals("chrome")) { 
     System.setProperty("webdriver.chrome.driver", "path to chrome"); 
     selenium = new ChromeDriver(); 
    } // define more as you need 
} 

然後就可以調用此方法是這樣的:

setSelenium(System.getenv("browser")); 

凡在你的環境中你第一次設置變量「瀏覽器」,以取其你想跑步。你也可以從其他東西獲得這個值,比如文件。

相關問題