2015-02-12 12 views
9

मैं कैसे सेलेनियम WebDriver एक विशेष तत्व के लिए स्क्रॉल करने के लिए स्क्रीन पर इसे पाने के लिए मिलता है उपयोग करने के साथ तत्व के लिए स्क्रॉल करने के लिए। मैंने कई अलग-अलग विकल्पों की कोशिश की है लेकिन कोई भाग्य नहीं है। क्या यह सी # बाइंडिंग में काम नहीं करता है?कैसे सेलेनियम WebDriver सी #

मैं इसे किसी विशेष स्थान पर ((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 150)"); पर जा सकता हूं लेकिन मैं हर बार सटीक स्थान दिए बिना इसे अलग-अलग तत्वों में भेजने में सक्षम होना चाहता हूं।

public IWebElement Example { get { return Driver.FindElement(By.Id("123456")); } }

पूर्व 1) ((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView(true);", Example);

पूर्व 2) ((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollBy(Example.Location.X", "Example.Location.Y - 100)");

जब मैं इसे देख, यह नीचे पृष्ठ तत्व के लिए कूद नहीं है, और अपवाद स्क्रीन बंद किया जा रहा है तत्व से मेल खाता है ।

अद्यतन: मैं जोड़ा एक bool पूर्व = Example.Exists(); इसके बाद और परिणामों की जांच की। यह अस्तित्व (इसकी सत्य) है। इसकी प्रदर्शित नहीं (के रूप में अपनी अभी भी गुप्त रूप में यह तत्व में नहीं ले जाया गया है) इसकी चयनित नहीं ??????

किसी सफलता By.ClassName देख रहा है। किसी को भी पता है अगर वहाँ ग # बाइंडिंग में इस By.Id कर के साथ एक समस्या है?

+0

शायद तुम, जब तक अपवाद गायब हो जाता है अनुकरण "तीर डाउन" keypresses कोशिश कर सकते हैं। मुझे पता है कि दीवार टूटने तक यह चलने वाली दीवार है, लेकिन अगर आप इसे किसी भी तरह से काम करना चाहते हैं तो यह एक समाधान हो सकता है ?! – krizz

+0

आप एक चीज के साथ प्रयास कर सकते हैं, ExpectedConditions.visibilityOfElement विधि का उपयोग कर सकते हैं और इसे लूप के दौरान एक स्थिति के रूप में रख सकते हैं और लूप स्क्रॉल में कुछ कहते हैं 100, 100 समन्वय। –

+0

जावास्क्रिप्ट कहने से पहले, क्या आप सुनिश्चित हैं कि WebDriver को आपका तत्व मिला है? – Jordan

उत्तर

21

इसका थोड़ा पुराने सवाल है, लेकिन मेरा मानना ​​है कि बेहतर समाधान है कि वहाँ ऊपर सुझाए गए से। https://stackoverflow.com/a/26461431/1221512

आप तत्व को स्क्रॉल किए जाने वाले कार्य वर्ग का उपयोग करना चाहिए:

यहाँ मूल जवाब है।

var element = driver.FindElement(By.id("element-id")); 
Actions actions = new Actions(driver); 
actions.MoveToElement(element); 
actions.Perform(); 
+1

यह मेरे लिए बहुत अच्छा काम करता है, धन्यवाद। मैंने कभी भी क्रियाओं पर ध्यान नहीं दिया है, लेकिन वे हाल ही में कुछ बार आए हैं। मुझे वास्तव में उनके बारे में और जानना चाहिए। – Joel

6

यह मेरे लिए काम करता है:

var elem = driver.FindElement(By.ClassName("something")); 
      ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", elem); 
+0

By.ClassName जो मैं ढूंढ रहा हूं उसके लिए पर्याप्त अद्वितीय नहीं होगा। मैंने उपर्युक्त कोशिश की और यह मेरे लिए काम नहीं करेगा। क्या आप सुझाव दे रहे हैं कि मुद्दा आईआईडी है? क्या आप इस स्क्रॉलिंग ऑफस्क्रीन को By.ClassName के लिए देखते हैं लेकिन By.ID नहीं? – merrua

+0

By.ClassName केवल तत्व खोजने का एक उदाहरण है।आप जो कुछ भी चाहते हैं उसका उपयोग कर सकते हैं/तत्व ढूंढने की आवश्यकता है। असली जादू यहां तत्व को स्क्रॉल करना है जो जावास्क्रिप्ट scrollIntoView() विधि में होता है। यदि आपको कोई तत्व ढूंढने में कठिनाई हो रही है तो यहां HTML पोस्ट करने का प्रयास करें। – user3734429

+1

मैंने अभी सुझाए गए समाधान का परीक्षण किया है और यह काम कर रहा है। चूंकि user3734429 ने कहा, आप कक्षा के नाम से फ़िल्टर करने के लिए बाध्य नहीं हैं, आपको केवल वेबइलेमेंट की आवश्यकता है (यह आपके ऊपर है कि आप इसे कैसे प्राप्त करेंगे, कक्षा द्वारा चयन करना सिर्फ एक ही तरीका है)। – DRAX

9

यह क्रोम, IE8 में मेरे लिए काम करता & IE11:

public void ScrollTo(int xPosition = 0, int yPosition = 0) 
{ 
    var js = String.Format("window.scrollTo({0}, {1})", xPosition, yPosition); 
    JavaScriptExecutor.ExecuteScript(js); 
} 

public IWebElement ScrollToView(By selector) 
{ 
    var element = WebDriver.FindElement(selector); 
    ScrollToView(element); 
    return element; 
} 

public void ScrollToView(IWebElement element) 
{ 
    if (element.Location.Y > 200) 
    { 
     ScrollTo(0, element.Location.Y - 100); // Make sure element is in the view but below the top navigation pane 
    } 

} 
+1

दोस्त, आप सबसे अच्छे हैं! इस उत्तर के लिए –

+0

100+! धन्यवाद आदमी – Umar

संबंधित मुद्दे