জাভা ব্যবহার করে সেলেনিয়াম ওয়েবড্রাইভারে মাউসওভার ফাংশনটি কীভাবে সম্পাদন করবেন?


132

আমি একটি ড্রপ ডাউন মেনুতে মাউসওভার ফাংশনটি করতে চাই। যখন আমরা মেনুতে ঘুরে দেখি, এটি নতুন বিকল্পগুলি প্রদর্শন করবে। আমি এক্সপ্যাথটি ব্যবহার করে নতুন বিকল্পগুলি ক্লিক করার চেষ্টা করেছি। তবে সরাসরি মেনুতে ক্লিক করতে পারে না। সুতরাং, ম্যানুয়াল উপায় হিসাবে আমি ড্রপ ডাউন মেনুতে ঘোরাতে চেষ্টা করছি এবং তারপরে নতুন বিকল্পগুলিতে ক্লিক করব।

Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();

বিশদ উত্তরের জন্য এই সাইটটি দেখুন - টেস্টআউটোমেজগুরু.com/…
ভিন

উত্তর:


116

'মাউস হোভার' ক্রিয়াটি সম্পাদন করা সত্যিই সম্ভব নয়, পরিবর্তে আপনাকে যে সমস্ত ক্রিয়াকলাপ একসাথে অর্জন করতে চান তার সমস্ত চেইন করা দরকার। সুতরাং যে উপাদানটি অন্যকে প্রকাশ করে সেটিতে চলে যান, তারপরে একই চেইনের সময়, এখন প্রকাশিত উপাদানটিতে যান এবং এটিতে ক্লিক করুন।

অ্যাকশন চেইনগুলি ব্যবহার করার সময় আপনাকে 'ব্যবহারকারীর মতো এটি করার' কথা মনে রাখতে হবে।

Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();

5
আমার জন্য এটি কাজ করে না। আমার মেনুটি কেবল তখনই overedেকে যাবে যদি আমি মুভিটোএলেমেন্ট ()
গারফিল্ডক্লোন

8
এটি বেশ webdriver.findElement(By... something)কার্যকর না হওয়ার কারণটি হ'ল যে সমস্ত কল অন্য কোনও কিছুর আগেই কার্যকর করা হয়েছিল (এটাই যে তাদের ফলাফলটি পাস করার একমাত্র উপায় moveElement)। সেই সময় আপনি যে দ্বিতীয় উপাদানটি সন্ধান করতে চান তা এখনও দৃশ্যমান নয় কারণ প্রথমটি এখনও overedেকে রাখা উচিত। এটি ঠিক করার জন্য, যেমনটি আপনি বলেছেন, আপনি মধ্যবর্তী .perform()গুলি সন্নিবেশ করতে পারেন , তারপরে দ্বিতীয়টির জন্য findElement, প্রথম হোভারটি সম্পাদনা করা হবে perform। প্রদত্ত সমাধানটি পৃষ্ঠার বাস্তবায়নের উপর নির্ভর করে কাজ করতে পারে তবে দৃশ্যত আপনার এবং আমার মাইলেজটি ভিন্ন।
Sander Verhagen

57

নিম্নলিখিতগুলি করার চেষ্টা করার সময় এই উত্তরগুলির কোনওটিই কাজ করে না:

  1. একটি মেনু আইটেম উপর ঘোরা।
  2. হোভারের পরে পাওয়া যায় এমন গোপন উপাদানটি সন্ধান করুন।
  3. সাব-মেনু আইটেমটি ক্লিক করুন।

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

Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
builder.moveToElement(clickElement).click().perform();

এটি আমার পক্ষে কার্যকর হয়নি। নিম্নলিখিত আমার জন্য কাজ করেছে:

Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
By locator = By.id("clickElementID");
driver.click(locator);

ঘোরাতে ক্রিয়াকলাপ এবং স্ট্যান্ডার্ড ওয়েবড্রাইভার ক্লিক ব্যবহার করে আমি ঘোরাতে পারি এবং তারপরে ক্লিক করতে পারি।


3
দ্বিতীয় উদাহরণটি আমার জন্যও কাজ করেছিল। পারফর্ম ()
TheRed__

1
বিশ্বাস করা যায় না এটি এখনও একটি সমস্যা ... এমনকি এটি কাজ করে না: builder.moveToElement (সেটিংস) mMoveByOffset (0, 30) .মোভটোইলেট (স্টেজিংমেনু)। বিরতি (20000) .কিডাউন (কীগুলি। কন্ট্রোল) lick ক্লিক করুন .keyUp (কী। কনট্রোল)। SendKeys (Keys.ENTER)। পারফর্ম (); এমনকি টাইম আউট স্পষ্টের মধ্যে উপাদানটির উপর হোভার সিএসএস ট্রিগার হওয়া দেখি। তবে আমি যা চেষ্টা করি তা নিয়ে কোনও ক্লিকই ট্রিগার হয়ে যায় না
সাঙ্গোকু

ক্লিকযোগ্য যদি কোনও সাধারণ উপাদান না হয় এবং এটি আগের মতো আসে: আপনি কীভাবে পরিচালনা করবেন । আপনি মাউস নেওয়ার পরে এটি দৃশ্যমান হবে
অশোক কুমার গণেশান

25

এই ব্লগ পোস্টের ভিত্তিতে আমি সেলেনিয়াম 2 ওয়েবড্রাইভারের সাথে নিম্নলিখিত কোডটি ব্যবহার করে হোভারিং ট্রিগার করতে সক্ষম হয়েছি:

String javaScript = "var evObj = document.createEvent('MouseEvents');" +
                    "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
                    "arguments[0].dispatchEvent(evObj);";


((JavascriptExecutor)driver).executeScript(javaScript, webElement);

2
কম স্পষ্ট সমাধান, তবে আমার আই 1111 পরীক্ষার জন্য 100% শক্ত। আপনার যদি ঘুরে বেড়াতে সমস্যা হয় moveToElementতবে এটি ব্যবহার করুন! আমি সি # তে কোড করি, তাই এটি করা জাভা পদ্ধতিই নয়।
ভিটি 100

সেলেনিয়াম মাউস অ্যাকশনসওয়েটস , জাভাস্ক্রিপ্ট initMouseEvent () Example
যশ

এটা কি arguments[0]?
আরিয়ান

@ আরিয়ান হোসেইনজাদেহ ডোম রেফারেন্সে পাস করেছেন দ্বিতীয় যুক্তির প্রসঙ্গে executeScript(), যা একটিwebElement
জুগওয়াল্ট

আমি জাভাস্ক্রিপ্ট এক্সিকিউটারের জন্য মিসাইন রেফ পেয়েছি। সি #
1234

11

এই কোডটি পুরোপুরি ভালভাবে কাজ করে:

 Actions builder = new Actions(driver);
 WebElement element = driver.findElement(By.linkText("Put your text here"));
 builder.moveToElement(element).build().perform();

মাউস শেষ হওয়ার পরে, আপনি প্রকাশিত তথ্যের উপর আপনি চান পরবর্তী ক্রিয়াটি সম্পাদন করতে যেতে পারেন


চমত্কার কেবল যোগ করতে হয়েছিলusing OpenQA.Selenium.Interactions;
সুশিগুয়ে

7

এই উদাহরণটি পরীক্ষা করে দেখুন কীভাবে আমরা এটি বাস্তবায়ন করতে পারি।

এখানে চিত্র বর্ণনা লিখুন

public class HoverableDropdownTest {

    private WebDriver driver;
    private Actions action;

    //Edit: there may have been a typo in the '- >' expression (I don't really want to add this comment but SO insist on ">6 chars edit"...
    Consumer < By > hover = (By by) -> {
        action.moveToElement(driver.findElement(by))
              .perform();
    };

    @Test
    public void hoverTest() {
        driver.get("https://www.bootply.com/render/6FC76YQ4Nh");

        hover.accept(By.linkText("Dropdown"));
        hover.accept(By.linkText("Dropdown Link 5"));
        hover.accept(By.linkText("Dropdown Submenu Link 5.4"));
        hover.accept(By.linkText("Dropdown Submenu Link 5.4.1"));
    }

    @BeforeTest
    public void setupDriver() {
        driver = new FirefoxDriver();
        action = new Actions(driver);
    }

    @AfterTest
    public void teardownDriver() {
        driver.quit();
    }

}

বিস্তারিত উত্তরের জন্য, এখানে চেক করুন - http://www.testautomationguru.com/selenium-webdriver-automating-hoverable-m মাল্টিলেভেলড্রপডাউনস /


5

আমি এই প্রশ্নটি আমার জাভাস্ক্রিপ্ট পরীক্ষাগুলির জন্য একই জিনিস করার উপায় খুঁজছেন এবং প্রটেক্টর (সেলসিয়ামের জাভাস্ক্রিপ্ট সীমান্তে) ব্যবহার করে খুঁজে পেয়েছি using

প্রোটেক্টর ১.২.০ এবং ওয়েবড্রাইভার ২.১ সহ আমার সমাধান:

browser.actions()
.mouseMove(
  element(by.css('.material-dialog-container'))
)
.click()
.perform();

এটি একটি অফসেট গ্রহণ করে (আমি এটিতে কোন উপাদানটির উপরের এবং বামে ক্লিক করতে ব্যবহার করছি :)

browser.actions()
.mouseMove(
  element(by.css('.material-dialog-container'))
  , -20, -20  // pixel offset from top left
)
.click()
.perform();

4

সেলেনিয়াম জাভা ওয়েবড্রাইভার ব্যবহার করে মাউস হোভারের নমুনা প্রোগ্রাম:

public class Mhover {
    public static void main(String[] args){
       WebDriver driver = new FirefoxDriver();
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       driver.get("http://www.google.com");
       WebElement ele = driver.findElement(By.id("gbqfba"));
       Actions action = new Actions(driver);
       action.moveToElement(ele).build().perform();
    }
}

9
আপনার উত্তর সম্পর্কে কিছু তথ্য সহ কোড পোস্ট করার চেয়ে দয়া করে বিবেচনা করুন। আমরা কেবল 'সংশোধন' সরবরাহ করার চেষ্টা করি না, তবে লোকদের শিখতে সহায়তা করি। মূল কোডটিতে কী ভুল ছিল, আপনি কী আলাদাভাবে করেছেন এবং কেন আপনার পরিবর্তন (গুলি) কাজ করেছে তা আপনাকে ব্যাখ্যা করা উচিত।
অ্যান্ড্রু বারবার

2
@ অ্যান্ড্রুবার্বার - প্রদত্ত প্রোগ্রামটি ব্যবহারকারীকে সত্যই সহায়তা করতে পারে। সেই প্রোগ্রামটি সঠিকভাবে কাজ করছে। ব্যবহারকারী ইতিমধ্যে তা স্বীকার করে নিয়েছে ..
সাহায্যের হাত

4
আমি এটা হবে বিতর্ক না কাজ ; আমি বলছি যে এটি কেন কাজ করতে পারে, তাদের কী ছিল তা কেন কাজ করছে না এবং আপনি কী পরিবর্তন করেছেন তা আপনার ব্যাখ্যা করা উচিত ।
অ্যান্ড্রু বারবার

এই কোডটি ওপি'র সমতুল্য এবং প্রশ্নের উত্তর দেয় না। কোনও প্রাসঙ্গিক তথ্য ছাড়াই এটি অতিমাত্রায় ব্যবহৃত হয়।
jpaugh

2

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

WebElement getmenu= driver.findElement(By.xpath("//*[@id='ui-id-2']/span[2]")); //xpath the parent

Actions act = new Actions(driver);
act.moveToElement(getmenu).perform();

Thread.sleep(3000);
WebElement clickElement= driver.findElement(By.linkText("Sofa L"));//xpath the child
act.moveToElement(clickElement).click().perform();

আপনার যদি কেস থাকে ওয়েবে অনেক বিভাগ থাকে তবে প্রথম পদ্ধতিটি ব্যবহার করুন। আপনি যে মেনুটি চেয়েছিলেন তার জন্য আপনার কেবল দ্বিতীয় পদ্ধতিটি প্রয়োজন।

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