Selenium 2.0 WebDriver Advcanced Interactions DoubleClick Help (c#)

21,245

Solution 1

This code works for me!

Actions action = new Actions(driver);
action.doubleClick(myElemment);
action.perform();

Solution 2

Do not forget "using"

using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Interactions.Internal;
using OpenQA.Selenium.Support.UI;

//create Actions object
Actions builder = new Actions(driver);
//create a chain of actions 
builder.DoubleClick().Build().Perform();

http://selenium-interview-questions.blogspot.ru/2014/03/how-to-double-click-on-web-element.html

Solution 3

Here is the Java equivalent. This code will blindly open the first event. You could add some logic to open a specific event etc. This code works! (tested with 2.12)

List<WebElement> events = driver.findElements(By.cssSelector("div.dv-appointment"));
for(WebElement event:events){
    WebElement body = event.findElement(By.cssSelector("div.body"));            
    if(!body.getText().isEmpty()) //or open a known event
    {
        System.out.println(body.getText()); //open the first event
        Actions builder = new Actions(driver);
        Action doubleClick = builder.doubleClick(event)
                                    .build();
        doubleClick.perform();
        break;                  
    }
}

Solution 4

I too had the problem where Selenium's doubleclick event works in Firefox but has no effect in Chrome. Upgrading to Selenium didn't help; I already have the latest version. (My environment is Ubuntu 14.04, Python 2.7.6, Selenium 2.44.0, Firefox 35.0, Chrome 40.0.2214.91.)

I'm not sure why CBRRacer's answer was downvoted. I successfully worked around the problem by using two click events. This works in both Firefox and Chrome. There are two ways do to it, and both worked for me.

The first way:

elem = driver.find_element_by_css_selector('#myElement')
elem.click()
elem.click()

The second way:

elem = driver.find_element_by_css_selector('#myElement')
actions = webdriver.ActionChains(driver)
actions.click(elem).click(elem).perform()

Solution 5

I quite like the approach used here, particularly queuing the actions first, then performing, since that allows repeated application of the actionchain.

http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.common.action_chains.ActionChains

From the documentation example linked:

menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
Share:
21,245
spacebed
Author by

spacebed

Updated on February 08, 2020

Comments

  • spacebed
    spacebed over 4 years

    So within my selenium regression tests, I've been trying to double click on a calendar to make a new appt. I have attempted to use the doubleClick(); method within the advanceduserinteractions library, but there is an issue; the two clicks aren't fast enough/close enough together to fire an actual double-click! Has anybody found a way to deal with this in their testing?

  • spacebed
    spacebed over 12 years
    Sadly this doesn't work. I tried this before the AdvancedUserInteractions, but neither seem to actually perform a Double Click.
  • spacebed
    spacebed over 12 years
    I have tried that, but the Actions doubleClick() method doesn't fire both clicks fast enough to register as a double click for some reason..
  • spacebed
    spacebed over 12 years
    Well, I updated to the current build of Selenium, and (with no code changes) it fires fast enough now haha. I'll mark this as the solution though, as I think the Actions driver is the simplest/most effective way to go.