সেলেনিয়ামের সাথে ভিউতে এলিমেন্ট স্ক্রোল করুন


207

ব্রাউজার উইন্ডোটি স্ক্রোল করার জন্য সেলেনিয়াম 1.x বা 2.x এর কোনও উপায় আছে যাতে কোনও এক্সপথ দ্বারা চিহ্নিত একটি নির্দিষ্ট উপাদান ব্রাউজারের দৃষ্টিতে দেখা যায়? সেলেনিয়ামে একটি ফোকাসের পদ্ধতি রয়েছে তবে এটি ফায়ারফক্সে দৃশ্যত শারীরিকভাবে স্ক্রোল করছে বলে মনে হয় না। এটি কীভাবে করা যায় সে সম্পর্কে কারও কোনও পরামর্শ আছে?

আমার এটির কারণটি হ'ল আমি পৃষ্ঠাটিতে কোনও উপাদানটির ক্লিক পরীক্ষা করছি। দুর্ভাগ্যক্রমে ইভেন্টটি উপাদানটি দৃশ্যমান না হলে কাজ করবে বলে মনে হচ্ছে না। উপাদানটি ক্লিক করার পরে আমার যে কোডটি জ্বলে ওঠে তা নিয়ন্ত্রণ করে না, তাই আমি এটি ডিবাগ করতে পারি না বা এর মধ্যে কোনও পরিবর্তন আনতে পারি না, তাই, সহজ সমাধানটি হ'ল আইটেমটি স্ক্রোল করা।


আপনি যদি এই হ্যাকি ব্যবহার করে দেখতে পারেন তবে অন্য কিছু আপনার জন্য কাজ না করে : 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
আপনার সুতোর ঘুমের দরকার কী? এক্সিকিউটিস্ক্রিপ্ট সিঙ্ক্রোনাস হওয়া উচিত
riccardo.tasso

1
@ riccardo.tasso লক্ষ্য অ্যাপটির অজানা সাথে মোকাবিলা করার জন্য একটি ঘুম প্রয়োগ করা যেতে পারে। যদি এটিতে ডায়নামিক স্ক্রোলিং থাকে বা একটি একক পৃষ্ঠার অ্যাপ্লিকেশন যা অন্যান্য সম্ভাবনার মধ্যে স্ক্রোলিংয়ের পরে পৃষ্ঠার পরবর্তী বিটটি লোড করে। অভিজ্ঞতা থেকে কথা বললে, সেলেনিয়াম প্রায়শই আমার সংস্থার সাইটটি ভেঙে ফেলেছে কারণ জাভাস্ক্রিপ্টটি সম্পন্ন করার চেয়ে স্বয়ংক্রিয় ক্রিয়াকলাপটি দ্রুত ঘটেছে এবং এইভাবে একটি অসম্পূর্ণ ডেটা মডেল পাস করেছে। কিছু জায়গাগুলি এটিকে একটি বাগ হিসাবে বিবেচনা করতে পারে তবে আমাকে বলা হয়েছিল "কোনও মানুষ কখনও এ জাতীয় দৃশ্যধারণ করতে পারে না, সুতরাং এটি সত্যিকারের বাগ নয়" " সি'স্ট লা ভি।
সলোনোটিক্স

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
ওয়েবইলেমেন্ট ভিউ বন্দরে না থাকলে এই কাজ করবে?
ভাইরাসকগুলি

9
@ ডোমিনিক: সেলেনিয়াম কীভাবে স্ক্রিনের বাইরে থাকা উপাদানগুলিতে মাউসকে সরিয়ে ফেলবে? স্বতঃস্ফূর্তভাবে এটি অবশ্যই প্রথমে উপাদানটি স্ক্রোল করে তারপরে মাউসটিকে এটিতে সরানো হবে। আমি এটি পরীক্ষা করেছি। এই কোডটি ফায়ারফক্স ওয়েবড্রাইভার ২.৪৮ এ কাজ করে তবে একটি ত্রুটি রয়েছে: আপনি যখন কোনও পৃষ্ঠায় একটি আইফ্রেমে থাকবেন তখন উপাদানটি থাকা অবস্থায় স্ক্রলিংটি আইফ্রেমে সঠিকভাবে কাজ করে না oc (যদিও ডকুমেন্টেশন বলে যে এই কমান্ডটি কেবল কোনও অবস্থান ফিরিয়ে দেয়, এটি স্ক্রোলও করে!)
এলময়ে

7
Seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/… এ থাকা দস্তাবেজগুলি এখন পরিষ্কারভাবে বলেছে "মৌলের মাঝের দিকে মাউস সরায় The উপাদানটি স্ক্রোল করা হয় এবং এর অবস্থানটি ব্যবহার করে গণনা করা হয় getBoundingClientRect। "
জর্জ পান্তাজেস

5
উপরের কোডটি "অফিশিয়াল উপায়" জাভা সেলেনিয়াম আপনাকে ভিউপোর্টে কোনও উপাদান স্ক্রোল করতে চাইছে তবে জেএস বাস্তবায়ন আমার কাছে আরও নির্ভরযোগ্যভাবে কাজ করেছে বলে মনে করার অনেক কিছুই চেষ্টা করার পরেও Java বিশেষত এই পদ্ধতি
কেনজি মিওয়া

2
আমার জন্য কাজ করেনি: - | পরিবর্তে স্ট্যাকওভারফ্লো . com / a / 23902068 / 661414 ব্যবহৃত হয়েছে ।
লিউকিপ

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

আপনি এটি চেষ্টা করতে পারেন।


1
ধন্যবাদ। আমার এমন পদ্ধতিটি ব্যবহার করা দরকার যেখানে সেলেনিয়ামের অটো-স্ক্রোলটি আমার ক্লিক করার জন্য প্রয়োজনীয় উপাদানটিকে অস্পষ্ট করার জন্য অন্য উপাদানকে ঘটাচ্ছে। অস্পষ্ট না হয়ে উপাদানটি ভিউপোর্টে দৃশ্যমান করতে আমি একটি স্বেচ্ছাসেবী পরিমাণ স্ক্রোল করতে সক্ষম হয়েছি।
ড্যানিয়েল রিচনাক

এটি কেবলমাত্র ফায়ারফক্সে কাজ করবে, ক্রোম এবং আইই এই পদ্ধতিটিকে সমর্থন করে না
ভাইরাসকুল

এজন্য আপনি js.ExecuteScript("arguments[0].scrollIntoView(true);" + "window.scrollBy(0,-100);", e);আইই এবং ফায়ারফক্স এবং js.ExecuteScript("arguments[0].scrollIntoViewIfNeeded(true);", e);ক্রোমের জন্য ব্যবহার করেন। সহজ।
IamBatman

((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);

এটি জেএস ব্যবহারের চেয়ে কোনও হ্যাকের চেয়ে কম নয় এবং এটি সত্যই সহজ জিনিস। আমি এটি প্রাথমিকভাবে আইই-তে একটি সমস্যা পেয়েছি যেখানে একটি ক্লিক উপাদানটিকে দেখার জন্য স্ক্রোল করার চেষ্টা করে তবে বেশিরভাগ ক্ষেত্রে তা তৈরি হয় না। সমাধানটি যথাযথ চেষ্টা / ধরা / লুপ দৃশ্যের সাথে করা হলে {PGUP using ব্যবহার করে ঠিক ততই মার্জিত।
jibbs

তুমি আমার দিন বাঁচিয়েছ! ধন্যবাদ
জেস্কো আর।

আমার ক্ষেত্রে পৃষ্ঠায় কাজটি ছিল। এটি একটি দুর্দান্ত হ্যাক (বনাম সমস্ত জেএস হ্যাক)।
akostadinov

ধন্যবাদ @ ডেভডেভ! সি # তে সমান:var elem = driver.FindElement(By.Id("element_id")); elem.SendKeys(Keys.PageDown);
ওয়াটথ

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

আরও উদাহরণের জন্য, এখানে যান । সবই রাশিয়ান, তবে জাভা কোডটি ক্রস-কালচারাল হয় :)


আমি কি বুঝতে পারি যে এই সমাধানের জন্য কেন -1 রয়েছে?
জোসেফ্নভু

কারণ এটি কেবল ফায়ারফক্সে কাজ করে। অন্য কোনও ব্রাউজার এই পদ্ধতিটিকে সমর্থন করে না।
ওয়েইন অ্যালেন

উপরের বর্ণিত দস্তাবেজের জন্য কারও যদি রাশিয়ান থেকে অনুবাদ প্রয়োজন হয়, সাহায্য করতে পেরে খুশি হবেন।
monkrus

8

সেলেনিয়ামে কোনও উপাদানটিতে স্ক্রোল করতে বা পৃষ্ঠাটি স্ক্রোল করার জন্য আমাদের একটি জাভাস্ক্রিপ্ট এক্সিকিউটারের সাহায্য নিতে হবে:

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

উপরের বিবৃতিতে element হ'ল উপাদানটি যেখানে আমাদের স্ক্রোল করা দরকার। আমি উপরের কোডটি চেষ্টা করেছিলাম এবং এটি আমার পক্ষে কাজ করে।

আমার এটিতে একটি সম্পূর্ণ পোস্ট এবং ভিডিও রয়েছে:

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


@ মুকেশ ওতওয়ানি উপরের কোডটি নীচে স্ক্রোল করবে, তবে এতে কোনও সংজ্ঞাযুক্ত পিক্সেল ব্যবহার না করে কীভাবে স্ক্রোল আপ আপ করতে হবে।
খান

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
আমার পক্ষে সেভাবে কাজ করছে বলে মনে হয় না। দর্শন ছাড়াই থাকা উপাদানগুলির জন্য 'উপাদানটি ক্লিকযোগ্য নয়' ত্রুটিগুলি
পাচ্ছি

5
@ ডেভডেভ আমার একই সমস্যা রয়েছে, আমার ক্ষেত্রে ব্যতীত, সেলেনিয়াম উপাদানটিতে ক্লিক ক্রিয়া সম্পাদন করে না এবং এর ব্যতিক্রমও নেই is আমার আগে সমস্যা হয়নি এবং আমি জানি না যে এর কারণ কী হয়েছে।
জেইনব আব্বাসিমাজার

5
অন্তর্নিহিত স্ক্রোলিং ব্রাউজারগুলির মধ্যে পরিবর্তিত হয়। আমার একটি পৃষ্ঠার নিচে একটি পপ-আপ মেনুতে একটি উপাদানটির একটি পরীক্ষা আছে। রুবি রত্ন সেলেনিয়াম_উইবড্রাইভার ২.৩৩ এর সাথে আমি ক্রোমিয়াম-ব্রাউজারটি 37 পেয়েছি (এবং আমি বিশ্বাস করি ইন্টারনেট এক্সপ্লোরার) মেনু আইটেমটি দেখার জন্য সত্যই স্ক্রোল করে তা ক্লিক করে। তবে ফায়ারফক্স 32 মোটেও স্ক্রোল করছে বলে মনে হচ্ছে না এবং তারপরে "এলিমেন্টটি বর্তমানে দৃশ্যমান নয় এবং তাই এর সাথে ইন্টারঅ্যাক্ট করা যাবে না" এর সাথে ব্যর্থ হয়।
skierpage

9
এই উত্তরটি ভুল। সেলেনিয়াম ২.০ এর স্পেসিফিকেশন অনুযায়ী WebElement.click()উপাদানটি ক্লিক করার জন্য এটি দৃশ্যমান হওয়া দরকার। এটি আপনার পক্ষে স্ক্রোল করবে না।
গিলি

5

উপাদানটি নজরে আনার জন্য চালকের ব্যবহার করুন কী pagedownবা downarrowকী হিসাবে প্রেরণ করতে। আমি জানি এটি খুব সহজ সমাধান এবং এটি সব ক্ষেত্রেই প্রযোজ্য নয়।


1
এটা অপদার্থ. আপনাকে একটি বিশাল পৃষ্ঠায় কয়েক ডজন পৃষ্ঠা পাঠাতে হতে পারে। এটি ধীর এবং নির্ভরযোগ্য নয়।
এলমিউ

2
হ্যাঁ. আমি রাজী. তবে আমি বলেছিলাম "সব ক্ষেত্রে প্রযোজ্য নয়"
গণেশ এস

elementদেখারযোগ্য পৃষ্ঠায় পরিচিত কিছু সন্ধান করা এবং পেজডাউন পাঠানো element.SendKeys(Keys.PageDown);আমার পক্ষে কাজ করেছিল।
গোকুল

আমি আল্ট কীটি ব্যবহার করার পরামর্শ দিচ্ছি যাতে আপনি পৃষ্ঠাটি স্ক্রোল না করে এবং কিছু উপাদানগুলিতে কীগুলি প্রেরণের চেষ্টা করতে গিয়ে দেখা দিতে পারে এমন ত্রুটিগুলি পরিচালনা করার জন্য (পাইথন) ধারাটি ব্যবহার করুন / ব্যবহার করুন।
অ্যালেক্স কে।

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

'লোকেশন_অনস_স্ক্রোলড_ইন্টো_ভিউ' পদ্ধতিটি ওয়েবএলমেট শ্রেণিতে একটি বিদ্যমান পদ্ধতি।

আমি প্রশংসা করি আপনি হয়ত রুবি ব্যবহার করছেন না তবে এটি আপনাকে কিছু ধারণা দেয়।


আমি উপরেরটি ঘোষণা করলাম module Capybara :: module Node, এবং আমাকে ন্যায়বিচারের native.location_once_scrolled_into_viewপরিবর্তে কল করা দরকার location_once_scrolled_into_view। আমি ::Selenium::WebDriver::Error::UnknownErrorউদ্ধারও করেছি, যা আমি প্রায়শই ফায়ারফক্স ৪৪.০.২ এ পাই getting তবে আমি মনে করি যে এই সমাধানটি যথেষ্ট নমনীয় নয় এবং শেষ পর্যন্ত <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

কখনও কখনও আমি সেলেনিয়ামের সাথেও স্ক্রোলিংয়ের সমস্যার মুখোমুখি হয়েছি। তাই আমি এটি অর্জনের জন্য জাভা স্ক্রিপ্টএক্সিকিটার ব্যবহার করেছি।

স্ক্রোল ডাউন জন্য:

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

আপনি যদি ভাবেন যে অন্য উত্তরগুলি খুব হ্যাক ছিল তবে এটির একটি খুব ভাল তবে কোনও জাভাস্ক্রিপ্ট ইঞ্জেকশন জড়িত নেই।

বোতামটি স্ক্রিনটি বন্ধ হয়ে গেলে এটি ভেঙে যায় এবং এতে স্ক্রোল হয়, তাই এটি আবার চেষ্টা করুন ... ¯ \ _ (ツ) _ / ¯

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

2

এটি জাভাস্ক্রিপ্টের সাথে একটি পুনরাবৃত্তি সমাধান, তবে উপাদানটির জন্য অপেক্ষা করার সাথে যুক্ত with

অন্যথায় 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)হয়নি। হয় কাজ করতে পারে , এটি আপনার দৃশ্যের উপর নির্ভর করে।
rsenna

আমার কেসটি বিপরীত - সত্য কাজ, মিথ্যা ব্যর্থতা, তবে ক্লিক যতদূর যায়। এটি মিথ্যা জন্য সঠিকভাবে স্ক্রোল করে না এবং এটিই আমি পছন্দ করি তবে যে কোনও কারণে সেলেনিয়াম এখনও ক্লিকের জন্য এটি দেখতে পাচ্ছে না। সত্য স্ক্রোলগুলি সমস্ত কিছু খুব উচ্চভাবে ব্যবহার করা, তবে কমপক্ষে এটি কার্যকর হয়।
বিল হিলিমান

ব্যবহারকারী প্রেরণকারীরা যখনই সম্ভব হয় ক্লিকের পরিবর্তে প্রবেশ করে - ব্রাউজার যদি 100% জুম না থাকে তবে এটি সমস্যাগুলি এড়িয়ে চলে।
জুনিয়র

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);");
}

@ অভিষেকবেদি আমার মনে আছে এটি ক্রোমেও সমর্থিত। আপনি যে কোন নির্দিষ্ট সমস্যার মুখোমুখি হতে পারেন?
ভাইরাসগুলি

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

এখানে আমি সেলেনিয়ামের জন্য পিএইচপি ওয়েবড্রাইভার দিয়ে এটি কীভাবে করব। এটি সেলেনিয়াম স্ট্যান্ড-একল সার্ভারের জন্য কাজ করে 2.39.0 + https://github.com/Element-34/php-webdriver + ফায়ারফক্স 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();

দ্রষ্টব্য: আমি এলিমেন্ট 34 পিএইচপি-ওয়েবড্রাইভারের একটি কাস্টমাইজড সংস্করণ ব্যবহার করি। তবে মূল কোনও পরিবর্তন নেই। আমি কেবল "উপাদান" এর পরিবর্তে আমার "ওয়েলমেন্ট" ব্যবহার করি। তবে এটি প্রশ্নে কোনও প্রভাব ফেলবে না। ড্রাইভার লেখক বলেছেন "প্রায় সমস্ত এপিআই কলগুলি ওয়েবড্রাইভার প্রোটোকলে যা সংজ্ঞায়িত হয়েছে তার প্রত্যক্ষ রূপান্তর হতে দেয়" " সুতরাং অন্যান্য প্রোগ্রামিং ভাষা নিয়ে আপনার কোনও সমস্যা হওয়া উচিত নয় no

শুধু ক্লিক করা আমার সেটআপে কাজ করবে না। এটি ক্লিকের পরিবর্তে একটি স্ক্রোল করবে, সুতরাং "লোকেশন_ইনভিউ ()" না কল করে আমাকে দুবার ক্লিক করতে হয়েছিল।

দ্রষ্টব্য: এই পদ্ধতিটি এমন উপাদানগুলির জন্য কাজ করে যা দেখা যায়, টাইপ বোতামের ইনপুট এর মতো।

একবার দেখুন: http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/location

জসনওয়ায়ারপ্রোটোকল # এর বিবরণে লোকেশন + মুভটো ব্যবহারের পরামর্শ দেওয়া হয়েছে, কারণ অবস্থান _ ইন_ভিউ একটি অভ্যন্তরীণ পদ্ধতি।


0

ব্রাউজার উইন্ডোটির নীচের অংশে ব্রাউজার.মোভমাউসটোলেট উপাদানটি ব্যবহার করা আমার পক্ষে কাজ করেছিল। অলৌকিকভাবে এটি ইন্টারনেট এক্সপ্লোরার, ফায়ারফক্স এবং ক্রোমে কাজ করেছে।

আমি জাভাস্ক্রিপ্ট ইনজেকশন কৌশলটিতে এটি বেছে নিয়েছিলাম কারণ এটি কম হ্যাকি অনুভব করেছে।


এটি কোন প্রোগ্রামিংয়ের ভাষা?
আকস্তাদদিনভ

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.scrolTop" ভেরিয়েবলের জন্য একটি পছন্দসই মান নির্ধারণ করতে পারেন।


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)");

আমার জন্য কাজ কর. ডার্ট ওয়েবড্রাইভার বাস্তবায়নের এখনও ক্রিয়া নেই।
গন্টার জ্যাচবাউর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.