Take the 2-minute tour ×
Software Quality Assurance & Testing Stack Exchange is a question and answer site for software quality control experts, automation engineers, and software testers. It's 100% free, no registration required.

Hi Guys. I have a problem with right click mouse event in Selenium 2.0. I'm using that method but in a console I've got:

Unable to locate element: {"method":"id","selector":"dijit_MenuItem_16_text"}

In my test case I've got

opPage.findElem("xpath element to I click on it").click();
opPage.rightClickOnAsset("xpath to element what is show after I right click mouse");

where the last method is defined as follows:

public WebElement rightClickOnAsset() {
  WebElement propButton = driver.findElement(By.xpath("xpath element to I click on it"));
  Actions clicker = new Actions(driver);
  clicker.contextClick(propButton).perform(); 

  return propButton;
}

Method is in another class in another Java file, look up the topic.

share|improve this question
    
Are you able to find this element in any other part of the code? From the error message it looks like the code has problem finding the element and not specifically the right click. –  Suchit Parikh Sep 25 '12 at 16:29
    
Yes I'm able to find element and click left mouse button on it –  Karol Sep 26 '12 at 12:28
    
After you left click does it change the state? If you get rid of the left click completely do you get the same error when you execute the rightClickOnAsset function? –  Sam Woods Sep 26 '12 at 15:46
    
Has anyone had success with the contextClick action command? I've run into the same problem as @Karol where the context menu doesn't show, but left-clicking and finding the element is not a problem –  squeemish Sep 26 '12 at 18:21
    
@Karol: That looks pretty strange, since you find element by XPath, why the error says about different selection method, by Id. Are you giving us correct code? –  dzieciou Nov 16 '12 at 6:36
show 1 more comment

3 Answers 3

More detail on my comment above. I do use the ContextClick but because of the new window I have to up popupHandle to deal with the results of the right click:

// Get the existing handles
IList<string> existingHandles = this.driver.WindowHandles;
// This is an internal class that uses Context Click to perform the Right Click
Actions clicker = new Actions(driver);
clicker.ContextClick(testUserAccount).Perform();
// Now select the item in the Menu that displays all info for the User
IWebElement showUserInfo = driver.FindElement(By.Id("menu_ID"));
// The rest of this would be for the right click options
showUserInfo.Click();
// Check for the launched window and save the new handle
string popupHandle = myConfig.findNewHandle(existingHandles, driver);
// Once the Window opens set focus on the order Window
driver.SwitchTo().Window(popupHandle);

Where findNewHandle is a separate function:

public string findNewHandle(IList<string> existingHandles, IWebDriver driver)
{
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));

    // Check for the launched window and save the new handle
    string f = wait.Until<string>((d) =>
    {
        d = driver;
        string foundHandle = null;
        IList<string> differentHandles = getDifference(existingHandles, d.WindowHandles);
        if (differentHandles.Count > 0)
        {
            foundHandle = differentHandles[0];
        }
        return foundHandle;
    });
    return f;
}

For me, I couldn't do anything with the right click context until I was able to find and make active the window the right click brought up.

share|improve this answer
add comment

Method 1 (Using Webdriver Context Click)

// get web element
WebElement elem = By.id(selector);

//move mouse to element, then perform right click
Actions actions = new Actions(webdriver);
actions.moveToElement(elem);
actions.contextClick(elem);
actions.perform();

Method 2 (Using Java Robot to trigger right click event)

// get web element
 WebElement elem = By.id(selector);

//move mouse to element, 
Actions actions = new Actions(webdriver);
actions.moveToElement(elem);
actions.perform();

//then perform right click using ROBOT
    Robot robot = new Robot();
    robot.mousePress(InputEvent.BUTTON3_MASK);
    robot.mouseRelease(InputEvent.BUTTON3_MASK);
share|improve this answer
    
Guarav's example won't work as expected; the robot click occurs at the current PHYSICAL mouse location, not the one established by the actions, which the robot has no awareness of. –  user5557 Jun 30 '13 at 12:13
add comment

This worked for me to right click on a row in table.

//Selecting all cells of the HTML table
List<WebElement> elementNumList=driver.findElements(By.xpath("//a[@id='elemnetId']"));

//Taking 1st cell
WebElement link=elementNumList.get(0);

//Right Clicking
new Actions(driver).contextClick(link).perform();
share|improve this answer
    
I have a similar setup, although for me it's ContextCick, but this works great for my right menu options. I also use a popupHandle to deal with the new window, not sure if you need that –  MichaelF Mar 21 '13 at 17:18
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.