2010-10-22 21 views
10

में जावा जेनेरिक इंटरफेस को कार्यान्वित करना मैं वेबड्राइवर के लिए webdriver-clj रैपर का उपयोग करके सेलेनियम 2/वेबड्राइवर प्रोजेक्ट में क्लोजर का लटका पाने की कोशिश कर रहा हूं।क्लोजर

हालांकि, चूंकि वेबइंटरफेस भारी लिपिबद्ध है, इसलिए मुझे पृष्ठ लोड के बजाय स्क्रिप्ट द्वारा कुछ तत्व बनाए जाने तक प्रतीक्षा करने का विकल्प होना चाहिए।

तो मैं WebDriverWait कक्षा का उपयोग करके गुण के द्वारा परीक्षण के लिए क्लोजर में प्रतीक्षा-फ़ंक्शन फ़ंक्शन बनाने का प्रयास कर रहा था, अधिमानतः वेबड्राइवर/बाय-फ़ंक्शंस से क्लोजर सिंटैक्स का उपयोग करना।

हालांकि, विधि तक प्रतीक्षाकर्ता वर्ग एक सामान्य इंटरफ़ेस (com.google.common.base.Function) को पैरामीटर के रूप में लेता है, और चूंकि मेरा जावा ज्ञान किसी भी तरह के निकट नहीं है, यह मेरे शुरुआती क्लोजर कौशल के लिए बहुत अधिक साबित हो रहा है।

क्लोजर-जावा इंटरऑप कौशल के साथ कोई भी व्यक्ति और क्लोजर में निम्नलिखित जावा कोड को कार्यान्वित करने का विचार है ताकि यह वेबड्राइवर/बाय-सिंटैक्स के साथ मिल सके?

Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) { 
return new Function<WebDriver, WebElement>() { 
public WebElement apply(WebDriver driver) { 
return driver.findElement(locator); 
} 
};} 

// ... 
driver.get("http://www.google.com"); 
WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3); 
WebElement element = 
wait.until(presenceOfElementLocated(By.name("q")) 

परिणाम यह संभव

(defn test [] 
    (let [driver (webdriver/new-driver :firefox)] 
    (webdriver/get driver "http://127.0.0.1/") 
    (webdriver/wait-for (webdriver/by-name "button")) 
    )) 

उत्तर

9

मैं webdriver बारे में कुछ भी पता नहीं है की तरह कुछ करना चाहिए, लेकिन एक इंटरफ़ेस को लागू करने clojure तरीके प्रॉक्सी कर रहे हैं और वस्तु के बारे में जैसे सोचना (और deftype और defrecord, लेकिन वे शायद यहां प्रासंगिक नहीं हैं)। वस्तु के बारे में जैसे सोचना के साथ, कि इंटरफ़ेस को लागू करने

(defn presence-of-element-located [locator] 
    (reify Function 
     (apply [this driver] 
     (.findElement driver locator)))) 

Clojure की तरह कुछ किसी भी तरह से जेनरिक हैंडल नहीं करता लगेगा, लेकिन जावा जेनरिक के प्रकार के पैरामीटर रनटाइम पर मौजूद नहीं है, तो आप अपने कार्यान्वयन पारित करने के लिए सक्षम होना चाहिए किसी भी प्रकार के फ़ंक्शन की अपेक्षा करने वाले किसी भी चीज़ के लिए फ़ंक्शन इंटरफ़ेस का।