2012-03-26 16 views
9

का उपयोग कर रिकॉर्ड क्रियाएं सेलेनियम के बारे में पूछने के लिए मेरे पास अर्ध-अस्पष्ट प्रश्न है। मैंने फ़ायरफ़ॉक्स ड्रायवर का उपयोग करके क्रियाएं करने के कुछ अलग-अलग तरीकों की खोज की है। मुझे जो करना है वह दोहराने वाली क्रिया है जो उपयोगकर्ता वेब पेज पर करता है (एक लिंक पर क्लिक करके, चेकबॉक्स जांचना आदि)। क्या विधियों का कोई तरीका या संयोजन है जो मुझे उपयोगकर्ता के कार्यों को "रिकॉर्ड" करने की अनुमति देता है? यहाँ मैं क्या कार्रवाई करने के लिए अब तक किया है (जो आपको नज़र आएगा मैं कार्रवाई करने के लिए WebDriverBackedSelenium और क्रिया वर्गों का उपयोग की कोशिश की है)सेलेनियम

import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriverBackedSelenium; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.openqa.selenium.interactions.Action; 

public class MyReplayer { 
    public static void main(String[] args) throws Exception { 
     // The Firefox driver supports javascript 
     FirefoxDriver driver = new FirefoxDriver(); 

     driver.get("http://www.cs.umd.edu"); 

     List<WebElement> elements = driver.findElements(By.tagName("a")); 
     //WebDriverBackedSelenium driverBacked = new WebDriverBackedSelenium(driver,  "http://www.cs.umd.edu"); 
     Actions builder = new Actions(driver);  
     Action clickLink = builder.click(elements.get(100)).build(); 
     clickLink.perform(); 
     //driverBacked.click("document.getElementsByTagName('a')[100]"); 
    } 
} 

उत्तर

5

आप Firefox के लिए Selenium IDE हिट्स का उपयोग करें और के लिए उत्पन्न परीक्षण निर्यात कर सकते हैं Webdriver। यह विशेष रूप से फ़ायरफ़ॉक्स ड्रायवर नहीं कहता है, लेकिन इंटरफ़ेस के तरीके आपके द्वारा पोस्ट किए गए समान दिखते हैं। आशा है कि ये आपकी मदद करेगा।

+0

आप जानते हैं कि कैसे सेलेनियम आईडीई उपयोगकर्ता की कार्रवाई को रिकॉर्ड करने में सक्षम है क्या की मेंटेनर कर रहा हूँ? यही वह कार्यक्षमता है जिसे मैं खुद को लागू करने के लिए देख रहा हूं लेकिन मुझे ऐसा करने में मेरी सहायता करने के लिए किसी भी तरीके से नहीं पता है। – user1294114

+0

मुझे नहीं पता कि सेलेनियम आईडीई कैसे करता है। लेकिन मुझे लगता है कि वे उस पृष्ठ के डीओएम में परिवर्तन घटनाओं को पकड़ते हैं, जिसे आप देख रहे हैं। मुझे नहीं पता कि वे ब्राउज़र जीयूआई में कितने एकीकृत हैं लेकिन यह भी हो रहा है। इनमें से अधिकतर सर्वर पक्ष पर भी पाए जा सकते हैं, लेकिन यह पता लगाना कि सर्वर पर पृष्ठ भेजने के बिना चेकबॉक्स चेक किया गया था, केवल ग्राहक पर हो सकता है (या आपको सब कुछ के लिए AJAX कॉल करना होगा) –

4

मैं Huxley पर आया था। यह उपयोगकर्ता क्रियाओं की रिकॉर्डिंग और प्लेबैक की अनुमति देता है। मुझे यह सवाल यह पता चला कि उन्होंने यह कैसे किया, लेकिन उन्हें स्रोत कोड का सहारा लेना पड़ा।

huxley/run.py के 98-154 लाइन रिकॉर्ड रिकॉर्ड को परिभाषित करते हैं। यह पृष्ठ पर कुछ जेएस निष्पादित करने के लिए वेबडिवायर का उपयोग करता है जो कुछ ईवेंट श्रोताओं को जोड़ता है। यह घटनाओं को वापस करने के लिए एक समारोह भी जोड़ता है।

(function() { 
var events = []; 
window.addEventListener('click', function (e) { events.push([Date.now(), 'click', [e.clientX, e.clientY]]); }, true); 
window.addEventListener('keyup', function (e) { events.push([Date.now(), 'keyup', String.fromCharCode(e.keyCode)]); }, true); 
window._getHuxleyEvents = function() { return events; }; 
})(); 

घटनाओं को पढ़ने के लिए जे एस समारोह कहा जाता है

events = d.execute_script('return window._getHuxleyEvents();') 

तब घटनाओं एक तरीका है कि आवेदन विशिष्ट लगता है में संग्रहीत हैं।

क्षमा करें, मेरे पास जावा कोड नहीं है। आशा है कि ये आपकी मदद करेगा।

0

मैं वर्तमान में ऐसा प्रोजेक्ट पर काम कर रहा हूं जो इस तरह कुछ करता है: https://github.com/hristo-vrigazov/selenium-record-replay यह ब्राउज़र और एप्लिकेशन के बीच प्रॉक्सी डालने और जावास्क्रिप्ट को इंजेक्ट करने से काम करता है जो आपके द्वारा परिभाषित कार्यों के लिए सुनता है। उदाहरण https://github.com/hristo-vrigazov/selenium-record-replay/blob/master/terminator-cli/src/main/java/browser/Main.java#L74

 RecordBrowserBase recordBrowserBase = new ChromeRecordBrowser(pathToChromedriver, pathToJSInjectionFile); 
     try { 
      recordBrowserBase.record(baseUrl); 
      System.out.println("Press Enter when finished recording"); 
      System.in.read(); 
      recordBrowserBase.dumpActions(outputFile); 
     } catch (IOException | InterruptedException | URISyntaxException e) { 
      e.printStackTrace(); 
     } 

     recordBrowserBase.cleanUp(); 

     System.exit(0); 

परियोजना एक बहुत ही प्रारंभिक चरण में अब भी है के लिए देखें, लेकिन यह अब भी इस्तेमाल किया जा सकता। वर्तमान में केवल क्रोम समर्थित है, लेकिन मैं जल्द ही अन्य ब्राउज़रों को भी जोड़ूंगा।

अस्वीकरण: मैं निर्माता और परियोजना