2013-01-23 60 views
1

http://seleniumhq.org/docs/03_webdriver.jsp它顯示下面的Java代碼示例是否有可能將Selenium 2 WebDriverWait與ColdFusion結合使用?

(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { 
    public Boolean apply(WebDriver d) { 
    return d.getTitle().toLowerCase().startsWith("cheese!"); 
    } 
}); 

是否可以寫代碼上面CFML,可能與CF10的dynamic proxy的幫助?

如果我們可以讓CF10的closure與上面的代碼示例一起工作,但它看起來不會因爲預期的Java接口和Java返回類型而工作,那我是否正確?

+0

我得出一個結論的構造函數,移植WebDriverWait到帶有'sleep()'的CFML和while循環將是最安全的選擇。然後利用CF10的封閉來模仿上面的官方API。真棒! – Henry

回答

2

我不確定哪個更好。但它可以使用動態代理。只要創建一個實現ExpectedCondition接口CFC:

component { 
    public boolean function apply(Any d) { 
     return d.getTitle().toLowerCase().startsWith("cheese!"); 
    } 
} 

然後創建代理的實例,並把它傳遞到的WebDriverWait

<cfscript> 
    driver = createObject("java", "org.openqa.selenium.firefox.FirefoxDriver").init(); 
    driver.get("http://www.google.com"); 

    by = createObject("java", "org.openqa.selenium.By"); 
    element = driver.findElement(By.name("q")); 

    WriteDump("Page title is: "& driver.getTitle()); 

    element.sendKeys(["Cheese!"]); 
    element.submit(); 

    conditionProxy = createDynamicProxy("test.ExpectedConditionProxy", ["org.openqa.selenium.support.ui.ExpectedCondition"]); 
    WebDriverWait = createObject("java", "org.openqa.selenium.support.ui.WebDriverWait"); 
    WebDriverWait.init(driver, 10).until(conditionProxy); 
    WriteDump("Page title is: "& driver.getTitle()); 

    driver.quit(); 
</cfscript> 
+0

謝謝!你確定''org.openqa.selenium.support.ui.ExpectedCondition「'足以滿足'org.openqa.selenium.support.ui.ExpectedCondition '?我沒有在這裏安裝CF10,你的代碼發佈了嗎? – Henry

+0

也是''任何''''''好''適用於'''當接口期望'WebDriver'時? thx – Henry

+1

是的,它適用於CF10。由於CF是鬆散類型的,你可以忽略java泛型'''(它們不適用於CF)並且只實現'ExpectedCondition'。此外,鍵入'Any'也沒問題,因爲CF不支持函數簽名中的類名稱(僅限組件路徑或標準類型)。所以你必須使用'Any'類型。但這不是問題,因爲代碼在需要時自動傳入「WebDriver」對象。 – Leigh

相關問題