सेलेनियम के साथ दृश्य में तत्व स्क्रॉल करें


207

क्या ब्राउज़र विंडो को स्क्रॉल करने के लिए सेलेनियम 1.x या 2.x दोनों में से कोई भी तरीका है ताकि XPath द्वारा पहचाना गया कोई विशेष तत्व ब्राउज़र को ध्यान में रखे? सेलेनियम में एक फोकस विधि है, लेकिन यह फ़ायर्फ़ॉक्स में दृश्य को शारीरिक रूप से स्क्रॉल करने के लिए नहीं लगता है। किसी को यह कैसे करना है पर कोई सुझाव है?

जिस कारण से मुझे इसकी आवश्यकता है, मैं पृष्ठ पर एक तत्व के क्लिक का परीक्षण कर रहा हूं। दुर्भाग्य से घटना तब तक काम नहीं करती जब तक कि तत्व दिखाई न दे। मेरे पास उस कोड का नियंत्रण नहीं है जब तत्व को क्लिक किया जाता है, इसलिए मैं डिबग नहीं कर सकता या इसमें संशोधन नहीं कर सकता, इसलिए, सबसे आसान समाधान आइटम को देखने के लिए स्क्रॉल करना है।


आप इस हैक करने की कोशिश कर सकते हैं अगर आपके लिए और कुछ नहीं काम करता है : stackoverflow.com/a/53771434/7093031
YB कारण

जवाबों:


214

स्क्रॉल करने के संबंध में कई चीजों की कोशिश की है, लेकिन नीचे दिए गए कोड ने बेहतर परिणाम प्रदान किए हैं।

यह तब तक स्क्रॉल करेगा जब तक कि तत्व देखने में न हो:

WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500); 

//do anything you want with the element

6
जब आप position: fixedअपने पृष्ठ पर एक तत्व रख सकते हैं और यह उस तत्व को अस्पष्ट कर रहा है जिसके लिए सेलेनियम क्लिक करना चाहता है, तो यह एक समाधान है । अक्सर ये निश्चित तत्व सबसे नीचे जाते हैं, इसलिए सेटिंग scrollIntoView(true)इसे अच्छे से व्यूपोर्ट के शीर्ष पर ले जाती है।
मंडिबल79

3
सेलेनियम (2.53) के नवीनतम संस्करण के आधार पर, यह अब एक महान सहायक समाधान है। सेलेनियम हमेशा तत्व को देखने में स्क्रॉल नहीं कर रहा है, इसलिए यह निश्चित रूप से काम में आता है।
ज़ोएडबर्ग

20
पास करें, trueकरने के लिए scrollIntoViewकरता है, तो वस्तु आप के लिए स्क्रॉल कर रहे हैं, नीचे जहां आप वर्तमान में कर रहे हैं false, तो वस्तु आप के लिए स्क्रॉल कर रहे हैं इसके बाद के संस्करण जहां आप वर्तमान में कर रहे हैं। मुझे लगता है कि बाहर एक मुश्किल समय था।
बिग मनी

2
आपको थ्रेड स्लीप की आवश्यकता क्यों है? executeScript को तुल्यकालिक होना चाहिए
riccardo.tasso

1
@ riccardo.tasso लक्ष्य एप्लिकेशन के अज्ञात से निपटने के लिए एक नींद लागू किया गया हो सकता है। यदि इसमें डायनेमिक स्क्रॉलिंग या एकल-पृष्ठ ऐप है जो स्क्रॉल करने के बाद पेज के अगले बिट को अन्य संभावनाओं के बीच लोड करता है। अनुभव से बात करते हुए, सेलेनियम ने अक्सर मेरी कंपनी की साइट को तोड़ दिया है क्योंकि स्वचालित रूप से कार्रवाई जावास्क्रिप्ट से पूरी हो सकती है, और इस तरह एक अधूरा डेटा मॉडल पारित किया गया। कुछ स्थान इसे एक बग मान सकते हैं, लेकिन मुझे बताया गया था कि "कोई भी मानव कभी भी इस तरह के परिदृश्य का आह्वान नहीं कर सकता है, इसलिए यह वास्तविक बग नहीं है।" C'est la vie।
सोलोनोटिक्स

157

आप org.openqa.selenium.interactions.Actionsकिसी तत्व में जाने के लिए कक्षा का उपयोग कर सकते हैं ।

जावा:

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();

अजगर:

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(driver.sl.find_element_by_id('my-id')).perform()

7
यदि वेब-व्यू व्यू पोर्ट में नहीं है तो क्या यह काम करेगा?
6

9
@Dominik: सेलेनियम माउस को उस तत्व तक कैसे ले जाएगा जो स्क्रीन के बाहर है? OBVIOUSLY इसे पहले तत्व को देखने के लिए स्क्रॉल करना होगा और फिर माउस को उस पर ले जाना होगा। मैंने इसका परीक्षण किया। यह कोड फ़ायरफ़ॉक्स वेबड्राइवर २.४ Web पर काम करता है, लेकिन एक बग है: जब आपके पास एक पेज में एक आइफ्रेम होता है, तो स्क्रॉल आइफ्रेम में सही से काम नहीं करता है जबकि एलिमेंट। (हालांकि प्रलेखन कहता है कि यह आदेश केवल एक स्थान देता है, यह भी स्क्रॉल करता है!)
एल्म्यू

7
पर डॉक्स seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/... अब स्पष्ट रूप से राज्य "तत्व के बीच करने के लिए माउस ले जाता है। तत्व दृश्य में स्क्रॉल किया जाता है और उसके स्थान का उपयोग कर गणना की जाती है getBoundingClientRect। "
जॉर्ज पेंताज़ 16

5
उपरोक्त कोड "आधिकारिक तरीका" है जावा सेलेनियम चाहता है कि आप किसी तत्व को व्यूपोर्ट में स्क्रॉल करें, लेकिन कई चीजों की कोशिश करने के बाद जेएस कार्यान्वयन मेरे लिए अधिक मज़बूती से काम करना चाहता था। यह विधि विशेष रूप से।
केनजी मिवा

2
मेरे लिए काम नहीं किया: - | प्रयुक्त stackoverflow.com/a/23902068/661414 बजाय।
ल्यूकिप

28
JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("javascript:window.scrollBy(250,350)");

आप यह कोशिश करना चाह सकते हैं।


1
धन्यवाद। मुझे इस विधि का उपयोग उस मामले में करने की आवश्यकता थी जहां सेलेनियम के ऑटो-स्क्रॉल के कारण एक और तत्व पैदा हो रहा था जिस तत्व को मैं क्लिक करने के लिए आवश्यक था। मैं एक मनमाना राशि स्क्रॉल करने में सक्षम था, जो कि दृश्यपोर्ट में दिखाई देने वाले तत्व को अस्पष्ट किए बिना बना सके।
डैनियल रिचनक

यह केवल
FIrefox

यही कारण है कि आप js.ExecuteScript("arguments[0].scrollIntoView(true);" + "window.scrollBy(0,-100);", e);IE और फ़ायरफ़ॉक्स के लिए और js.ExecuteScript("arguments[0].scrollIntoViewIfNeeded(true);", e);क्रोम के लिए उपयोग करते हैं । सरल।
IBBatman

((JavascriptExecutor) driver).executeScript("javascript:window.scrollBy(0,250)");यह क्रोम में काम करता था। और एकमात्र समाधान जो वास्तव में मेरे लिए काम करता था। पहली टिप्पणीकार के रूप में समान स्थिति, मेरे पास नीचे एक निश्चित तत्व था जो उस तत्व को अस्पष्ट करता रहा जिसे मुझे क्लिक करने की आवश्यकता थी।
चांदी


15

यदि आप सेलेनियम वेबड्राइवर का उपयोग करके फ़ायरफ़ॉक्स विंडो पर स्क्रॉल करना चाहते हैं, तो जावा कोड में जावास्क्रिप्ट का उपयोग करने का एक तरीका है। नीचे स्क्रॉल करने के लिए जावास्क्रिप्ट कोड (वेब ​​पेज के नीचे) इस प्रकार है:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollTo(0, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight));");

10

किसी भी तत्व को लक्षित करना और कुंजी (या ऊपर / बाएं / दाएं) भेजना भी काम करने लगता है। मुझे पता है कि यह थोड़ा हैक है, लेकिन मैं वास्तव में स्क्रॉल समस्या को हल करने के लिए जावास्क्रिप्ट का उपयोग करने के विचार में नहीं हूं।

उदाहरण के लिए:

WebElement.sendKeys(Keys.DOWN);

यह js का उपयोग करने से किसी हैक से कम नहीं है और यह वास्तव में सबसे सरल बात है। मुझे यह मुख्य रूप से IE के साथ एक समस्या मिली जहां एक क्लिक तत्व को देखने के लिए स्क्रॉल करने की कोशिश करता है, लेकिन यह काफी नहीं बनाता है। यदि उचित प्रयास / कैच / लूप परिदृश्य के साथ किया जाता है तो समाधान {PGUP} का उपयोग करते हुए सुरुचिपूर्ण है।
जीबस

आपने मेरा दिन बचाया! धन्यवाद
जेसको आर।

मेरे मामले में पेज नीचे काम करने वाली चीज थी। यह एक अच्छा हैक (बनाम सभी जेएस हैक) है।
अकोस्टैडिनोव

धन्यवाद @DevDave! C # में समतुल्य:var elem = driver.FindElement(By.Id("element_id")); elem.SendKeys(Keys.PageDown);
18

9
webElement = driver.findElement(By.xpath("bla-bla-bla"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", webElement);

अधिक उदाहरणों के लिए, यहां जाएं । सभी रूसी में, लेकिन जावा कोड पार-सांस्कृतिक है :)


क्या मैं समझ सकता हूं कि इस समाधान के लिए -1 क्यों है?
जॉसेफ्नू

क्योंकि यह केवल फ़ायरफ़ॉक्स में काम करता है। कोई अन्य ब्राउज़र इस विधि का समर्थन नहीं करता है।
वेन एलन

यदि किसी को उपरोक्त दस्तावेज के लिए रूसी से अनुवाद की आवश्यकता है, तो मदद करने में खुशी होगी।
भिक्षु

8

सेलेनियम में हमें किसी तत्व को स्क्रॉल करने या पृष्ठ को स्क्रॉल करने के लिए जावास्क्रिप्ट निष्पादक की मदद लेनी होगी:

je.executeScript("arguments[0].scrollIntoView(true);", element);

उपरोक्त कथन elementमें सटीक तत्व है जहां हमें स्क्रॉल करने की आवश्यकता है। मैंने उपरोक्त कोड की कोशिश की, और इसने मेरे लिए काम किया।

मेरे पास इस पर एक पूरा पोस्ट और वीडियो है:

http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/


@ मुकेश ओटवाणी उपरोक्त कोड को नीचे स्क्रॉल करेंगे, लेकिन इसमें परिभाषित किसी भी पिक्सेल का उपयोग किए बिना कैसे abt स्क्रॉल कर सकते हैं।
खान

6

स्क्रॉल करने के लिए आप इस कोड स्निपेट का उपयोग कर सकते हैं:

सी#

var element = Driver.FindElement(By.Id("element-id"));
Actions actions = new Actions(Driver);
actions.MoveToElement(element).Perform();

ये लो


6

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

IWebElement element = driver.FindElements(getApplicationObject(currentObjectName, currentObjectType, currentObjectUniqueId))[0];
 ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);

5

सेलेनियम 2 तत्व पर स्क्रॉल करने की कोशिश करता है और फिर उस पर क्लिक करें। ऐसा इसलिए है क्योंकि सेलेनियम 2 एक तत्व के साथ बातचीत नहीं करेगा जब तक कि यह नहीं लगता कि यह दिखाई दे रहा है।

तत्व तक स्क्रॉल करना निहित होता है, इसलिए आपको केवल आइटम खोजने की आवश्यकता होती है और फिर उसके साथ काम करना होता है।


19
यह सवाल का जवाब कैसे है?
रिस्टोरियरपोस्ट

57
मेरे लिए इस तरह से काम करता प्रतीत नहीं होता है। देखने से बाहर होने वाले तत्वों के लिए 'तत्व क्लिक करने योग्य नहीं' त्रुटियां हो रही हैं
DevDave

5
@ डेवडेव में मुझे वही समस्या है, मेरे मामले को छोड़कर, सेलेनियम तत्व पर क्लिक कार्रवाई नहीं करता है और कोई अपवाद नहीं है। मुझे पहले समस्या नहीं थी और मुझे नहीं पता कि इसका क्या कारण है।
ज़िनाब अब्बासिमज़ार

5
अंतर्निहित स्क्रॉल ब्राउज़र के बीच भिन्न होता है। मेरे पास पृष्ठ के नीचे पॉप-अप मेनू भाग में एक तत्व का परीक्षण है। रूबी मणि selenium_webdriver 2.43 के साथ मुझे क्रोमियम-ब्राउज़र 37 (और मुझे विश्वास है कि इंटरनेट एक्सप्लोरर) वास्तव में मेनू आइटम को स्क्रॉल करता है और उसे क्लिक करता है। लेकिन फ़ायरफ़ॉक्स 32 बिल्कुल भी स्क्रॉल नहीं करता है, और फिर "तत्व वर्तमान में दिखाई नहीं देता है और इसलिए इसके साथ बातचीत नहीं की जा सकती है"।
स्काईपेज पेज

9
यह उत्तर गलत है। सेलेनियम 2.0 के विनिर्देश के अनुसार WebElement.click()उस पर क्लिक करने के लिए तत्व को दिखाई देने की आवश्यकता है। यह आपकी ओर से स्क्रॉल नहीं करेगा।
गिली

5

तत्व को देखने के लिए कुंजी pagedownया downarrowकुंजी भेजने के लिए ड्राइवर का उपयोग करें । मुझे पता है कि यह बहुत आसान है और सभी मामलों में लागू नहीं हो सकता है।


1
यह बकवास है। आपको एक बड़े पृष्ठ पर एक दर्जन पृष्ठ नीचे भेजने पड़ सकते हैं। यह धीमा है और विश्वसनीय नहीं है।
एल्म्यू

2
हाँ। मैं सहमत हूँ। लेकिन मैंने कहा कि "सभी मामलों में लागू नहीं"
गणेश एस

elementदेखने योग्य पृष्ठ में कुछ ज्ञात खोजने और पेजडाउन भेजने element.SendKeys(Keys.PageDown);ने मेरे लिए काम किया।
गोकुल

मैं Alt कुंजी का उपयोग करने की सलाह दूंगा ताकि आप पृष्ठ को स्क्रॉल न करें और त्रुटियों को संभालने के लिए (Python) क्लॉज़ का उपयोग करें जो कुछ तत्वों को कुंजी भेजने की कोशिश करते समय हो सकता है।
एलेक्स के।

4

मेरे अनुभव से, सेलेनियम वेबड्राइवर क्लिक पर एक तत्व को ऑटो स्क्रॉल नहीं करता है जब पृष्ठ पर एक से अधिक स्क्रॉल करने योग्य अनुभाग होते हैं (जो कि काफी सामान्य है)।

मैं रूबी का उपयोग कर रहा हूं, और अपने ऑटो के लिए, मुझे क्लिक विधि को इस प्रकार से बंद करना पड़ा;

class Element

      #
      # Alias the original click method to use later on
      #
      alias_method :base_click, :click

      # Override the base click method to scroll into view if the element is not visible
      # and then retry click
      #
      def click
        begin
          base_click
        rescue Selenium::WebDriver::Error::ElementNotVisibleError
          location_once_scrolled_into_view
          base_click
        end
      end

WebElement वर्ग पर 'location_once_scrolled_into_view' पद्धति एक मौजूदा पद्धति है।

मैं समझता हूं कि आप रूबी का उपयोग नहीं कर रहे हैं, लेकिन यह आपको कुछ विचार देना चाहिए।


मैंने उपरोक्त को घोषित किया module Capybara :: module Node, और मुझे native.location_once_scrolled_into_viewबस के बजाय कॉल करने की आवश्यकता थी location_once_scrolled_into_view। मैंने भी बचाया ::Selenium::WebDriver::Error::UnknownError, जो कि मुझे फ़ायरफ़ॉक्स 44.0.2 में अक्सर मिल रहा है। लेकिन मुझे लगता है कि यह समाधान पर्याप्त रूप से लचीला नहीं है और अंततः <Element>.native.location_once_scrolled_into_viewकॉल को स्वीकृति परीक्षण में डाल दिया गया , इसके बाद तुरंत page.execute_script('window.scrollByPages(-1)')जहां जरूरत थी।
अल चो

वातिर के पास वह तरीका है Element#scroll_into_viewजो सेलेनियम के लिए है location_once_scrolled_into_view। लेकिन दोनों सेलेनियम डिफ़ॉल्ट व्यवहार से अलग कुछ भी नहीं करते हैं इसलिए अतिप्रवाह तत्व अभी भी जो कुछ भी हम क्लिक करने की कोशिश करते हैं उसमें बाधा डाल सकते हैं।
एकोस्टाडिनोव

3

एक तत्व को देखने के लिए रूबी स्क्रिप्ट नीचे दी गई है।

$driver.execute_script("arguments[0].scrollIntoView(true);", element)
sleep(3)
element.click

2

कभी-कभी मुझे सेलेनियम के साथ स्क्रॉल करने की समस्या का भी सामना करना पड़ा। इसलिए मैंने इसे प्राप्त करने के लिए javaScriptExecuter का उपयोग किया।

नीचे स्क्रॉल करने के लिए:

WebDriver driver = new ChromeDriver();
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0, 250)", "");

या, भी

js.executeScript("scroll(0, 250);");

स्क्रॉल करने के लिए:

js.executeScript("window.scrollBy(0,-250)", "");

या,

js.executeScript("scroll(0, -250);");

2

अगर आपको लगता है कि अन्य उत्तर बहुत अधिक हैक थे, तो यह बहुत अधिक है, लेकिन इसमें कोई जावास्क्रिप्ट इंजेक्शन शामिल नहीं है।

जब बटन स्क्रीन से बंद हो जाता है, तो यह टूट जाता है और इसे स्क्रॉल करता है, इसलिए इसे पुन: प्रयास करें ... is \ _ (¯) _ / _

try
{
    element.Click();
}
catch {
    element.Click();
}

2

यह जावास्क्रिप्ट के साथ एक दोहराया समाधान है, लेकिन एक अतिरिक्त तत्व के लिए इंतजार कर रहा है।

अन्यथा ElementNotVisibleExceptionप्रकट हो सकता है यदि तत्व पर कुछ कार्रवाई की जा रही है।

this.executeJavaScriptFunction("arguments[0].scrollIntoView(true);", elementToBeViewable);
WebDriverWait wait = new WebDriverWait(getDriver(), 5);
wait.until(ExpectedConditions.visibilityOf(elementToBeViewable));

?? <- क्या मतलब है?
चोई

1

मैंने तत्व को स्क्रॉल करने और क्लिक करने के लिए इस तरह का उपयोग किया है:

List<WebElement> image = state.getDriver().findElements(By.xpath("//*[contains(@src,'image/plus_btn.jpg')]"));

for (WebElement clickimg : image)
{
  ((JavascriptExecutor) state.getDriver()).executeScript("arguments[0].scrollIntoView(false);", clickimg);
  clickimg.click();
}

मेरे मामले में, scrollIntoView(false)काम किया, लेकिन scrollIntoView(true)नहीं किया। या तो काम कर सकता है , यह आपके परिदृश्य पर निर्भर करता है।
रासेन

मेरा मामला विपरीत है - सच काम करता है, झूठ विफल होता है, लेकिन केवल जहां तक ​​क्लिक जाता है। यह झूठे के लिए सही तरीके से स्क्रॉल करता है, और यह वही है जो मैं पसंद करता हूं, लेकिन जो भी कारण सेलेनियम अभी भी क्लिक के लिए नहीं देख सकता है। सच स्क्रॉल का उपयोग करना हर तरह से बहुत अधिक है, लेकिन कम से कम यह काम करता है।
बिल हिलमैन

उपयोगकर्ता प्रेषक क्लिक के बजाय जब संभव हो तो दर्ज करें - यह उन मुद्दों से बचता है यदि ब्राउज़र 100% ज़ूम में नहीं है।
Zunair

1
def scrollToElement(element: WebElement) = {
  val location = element.getLocation
  driver.asInstanceOf[JavascriptExecutor].executeScript(s"window.scrollTo(${location.getX},${location.getY});")
}

1

आप स्क्रॉल पेज वेब तत्वों और वेब पेज पर जाना चाह सकते हैं- सेलेनियम वेबड्राइवर जावास्क्रिप्ट का उपयोग करके :

public static void main(String[] args) throws Exception {

    // TODO Auto-generated method stub
    FirefoxDriver ff = new FirefoxDriver();
    ff.get("http://toolsqa.com");
    Thread.sleep(5000);
    ff.executeScript("document.getElementById('text-8').scrollIntoView(true);");
}

@AbhishekBedi मुझे याद है कि क्रोम में भी इसका समर्थन किया गया था। किसी विशेष समस्या का सामना करना पड़ सकता है?
वायरसरोक

1

स्क्रॉल करने की अधिकांश स्थिति में यह कोड काम करेगा।

WebElement element = driver.findElement(By.xpath("xpath_Of_Element"));                 
js.executeScript("arguments[0].click();",element);

1

जावा

x yस्थिति का उपयोग करने के लिए स्क्रॉल करने का प्रयास करें , और इसके JavascriptExecutorसाथ उपयोग तर्क है "window.scrollBy(x, y)":।

निम्नलिखित आयात:

import org.openqa.selenium.WebElement;
import org.openqa.selenium.JavascriptExecutor;

सबसे पहले आपको x yस्थान को तत्व की आवश्यकता है।

//initialize element
WebElement element = driver.findElement(By.id("..."));

//get position
int x = element.getLocation().getX();
int y = element.getLocation().getY();

//scroll to x y 
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(" +x +", " +y +")");

1

मुझे यकीन नहीं है कि यह प्रश्न अभी भी प्रासंगिक है, लेकिन https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView से स्क्रॉल इनटू व्यू प्रलेखन के संदर्भ में

सबसे आसान उपाय होगा

executor.executeScript("arguments[0].scrollIntoView({block: \"center\",inline: \"center\",behavior: \"smooth\"});",element);

यह पृष्ठ के केंद्र में तत्व को स्क्रॉल करता है।


0

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

यहाँ जावा के लिए मेरा समाधान है:

public List<String> getBoundedRectangleOfElement(WebElement we)
{
    JavascriptExecutor je = (JavascriptExecutor) driver;
    List<String> bounds = (ArrayList<String>) je.executeScript(
            "var rect = arguments[0].getBoundingClientRect();" +
                    "return [ '' + parseInt(rect.left), '' + parseInt(rect.top), '' + parseInt(rect.width), '' + parseInt(rect.height) ]", we);
    System.out.println("top: " + bounds.get(1));
    return bounds;
}

और फिर, स्क्रॉल करने के लिए, आप इसे इस तरह कहते हैं:

public void scrollToElementAndCenterVertically(WebElement we)
{
    List<String> bounds = getBoundedRectangleOfElement(we);
    Long totalInnerPageHeight = getViewPortHeight(driver);
    JavascriptExecutor je = (JavascriptExecutor) driver;
    je.executeScript("window.scrollTo(0, " + (Integer.parseInt(bounds.get(1)) - (totalInnerPageHeight/2)) + ");");
    je.executeScript("arguments[0].style.outline = \"thick solid #0000FF\";", we);
}

getViewPortHeight फ़ंक्शन गायब है ... एक धारणा में आप लक्ष्य तत्व की ऊंचाई ले रहे हैं
शुभम जैन

0

यहाँ मैं इसे सेलेनियम के लिए PHP वेबड्राइवर के साथ कैसे करता हूं। यह सेलेनियम स्टैंड-अलोन सर्वर के लिए काम करता है 2.39.0 + https://github.com/Element-34/php-webdriver + Firefox 25.0

$element=$session->welement("xpath", "//input[@value='my val']");
$element->click();
$element=$session->welement("xpath", "//input[@value='ma val2']");
$element->location_in_view(); // < -- this is the candy
$element->click();

नोट: मैं Element34 PHP-webdriver के एक अनुकूलित संस्करण का उपयोग करता हूं। लेकिन कोर में कोई बदलाव नहीं हुआ है। मैं सिर्फ "एलिमेंट" का उपयोग "तत्व" के बजाय करता हूं। लेकिन यह विचाराधीन मामले पर कोई प्रभाव नहीं डालता है। ड्राइवर लेखक का कहना है कि "लगभग सभी एपीआई कॉल को वेबड्राइवर प्रोटोकॉल में खुद को परिभाषित करने का एक सीधा परिवर्तन करने की अनुमति है।" इसलिए आपको अन्य प्रोग्रामिंग भाषाओं के साथ कोई समस्या नहीं होनी चाहिए।

बस क्लिक करने से मेरा सेटअप काम नहीं करेगा। यह क्लिक के बजाय स्क्रॉल करेगा, इसलिए मुझे "location_in_view ()" को कॉल किए बिना दो बार क्लिक करना होगा।

नोट: यह विधि उन तत्वों के लिए काम करती है जिन्हें टाइप बटन के इनपुट की तरह देखा जा सकता है।

पर एक नज़र डालें: http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/location

JsonWireProtocol के लिए वर्णन # स्थान + चाल का उपयोग करने का सुझाव देता है, क्योंकि स्थान _in_view एक आंतरिक विधि है।


0

मेरे लिए काम करने वाली चीज़ ब्राउज़र विंडो के नीचे एक तत्व पर Browser.MoveMouseToElement विधि का उपयोग करना था। चमत्कारी रूप से इसने इंटरनेट एक्सप्लोरर, फ़ायरफ़ॉक्स और क्रोम में काम किया।

मैंने इसे जावास्क्रिप्ट इंजेक्शन तकनीक पर सिर्फ इसलिए चुना क्योंकि यह कम हैकी लगा।


यह कौन सी प्रोग्रामिंग भाषा है?
अकोस्टैडिनोव

0

मैं एडीएफ घटकों के साथ परीक्षण कर रहा हूं और आपको आलसी लोडिंग का उपयोग करने पर स्क्रॉल करने के लिए एक अलग कमांड रखना होगा। यदि ऑब्जेक्ट लोड नहीं हुआ है और आप इसे सेलेनियम का उपयोग करके खोजने का प्रयास करते हैं, तो सेलेनियम एक तत्व-न-पाया अपवाद फेंक देगा।


0

यदि कुछ भी काम नहीं करता है, तो क्लिक करने से पहले यह कोशिश करें:

public void mouseHoverJScript(WebElement HoverElement) {

    String mouseOverScript = "if(document.createEvent){var evObj = document.createEvent('MouseEvents');evObj.initEvent('mouseover', true, false); arguments[0].dispatchEvent(evObj);} else if(document.createEventObject) { arguments[0].fireEvent('onmouseover');}";
    ((JavascriptExecutor) driver).executeScript(mouseOverScript, HoverElement);
}

0

जावा में हम जावास्क्रिप्ट का उपयोग करके स्क्रॉल कर सकते हैं, जैसे निम्नलिखित कोड में:

driver.getEval("var elm = window.document.getElementById('scrollDiv'); if (elm.scrollHeight > elm.clientHeight){elm.scrollTop = elm.scrollHeight;}");

आप "elm.scrollTop" चर के लिए एक वांछित मान असाइन कर सकते हैं।


0

एक समाधान है:

public void javascriptclick(String element)
{
    WebElement webElement = driver.findElement(By.xpath(element));
    JavascriptExecutor js = (JavascriptExecutor) driver;

    js.executeScript("arguments[0].click();", webElement);
    System.out.println("javascriptclick" + " " + element);
}

0

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

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.scrollBy(250, 350)");

मेरे लिये कार्य करता है। डार्ट वेबड्राइवर कार्यान्वयन में अभी तक कार्रवाई नहीं है।
गुंटर ज़ोचबॉयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.