2012-07-11 146 views
19

Estoy usando Selenium webdriver. No puedo seleccionar (decir 2do) la opción de las Opciones abiertas al hacer clic derecho.Seleccione una opción del menú de clic derecho en Selenium Webdriver - Java

En mi código actual, puedo hacer clic derecho sobre webElement pero no puedo seleccionar una opción de la lista que se abre después de hacer clic derecho, ya que desaparece automáticamente.

Actions action= new Actions(driver); 
action.contextClick(productLink).build().perform(); 

Así que con este código puedo hacer clic derecho pero el menú del botón derecho desaparece automáticamente. Quiero seleccionar decir 2nd Option en el menú de clic derecho.

Por favor ayuda !!!

Respuesta

27

para seleccionar el elemento del menú contextual, usted tiene que basta con mover el posiciones del mouse con el uso del evento de tecla abajo como este: -

Actions action= new Actions(driver); 
action.contextClick(productLink).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform(); 

Espero que esto funcione para usted. Que tenga un gran día :)

+0

@ Neeraj- Esto está funcionando bien ... ¡Muchas gracias! –

1

Puede que tenga que mover el ratón a cualquier lugar en particular después de contexto click() como este -

Actions action = new Actions(driver); 
actions.contextClick(link).moveByOffset(x,y).click().build().perform(); 

Para entender cómo moveByOffset (x, y) se ven las obras here;

Espero que esto funcione. Deberá calcular los valores de compensación para x y y;

La mejor manera sería encontrar el tamaño de cada botón de opción después de hacer clic derecho y luego, si hace clic en la segunda opción.

x = anchura del botón de opción/2

y = 2 * (tamaño de cada botón de opción)

+0

@ Hari Reddy - Gracias por responder, En la solución actual, el problema es que no puedo o obtener los valores de compensación porque "Opciones de menú de clic derecho" no se pueden inspeccionar en Firebug. Por lo tanto, no se pueden obtener las compensaciones en el diseño de Firebug>. –

+0

sí Entiendo su problema. Incluso no estoy seguro de cómo podemos encontrar el ancho de las opciones que obtenemos después de hacer clic derecho. ¿Puedes probar un poco de golpe y sendero, tratar de incrementar en 5 o 10. Déjame saber qué pasa? –

0

Aquí está el código para hacer clic derecho en un elemento de bienestar.

Actions actions = new Actions(driver);  
Action action=actions.contextClick(WebElement).build(); //pass WebElement as an argument 
      action.perform(); 
4

este enfoque es mejor y su éxito:

Actions oAction = new Actions(driver); 
oAction.moveToElement(Webelement); 
oAction.contextClick(Webelement).build().perform(); /* this will perform right click */ 
WebElement elementOpen = driver.findElement(By.linkText("Open")); /*This will select menu after right click */ 

elementOpen.click(); 
+0

funciona tal vez para menús personalizados, pero no para el menú del navegador Chrome – iirekm

3

tomaremos la ayuda de la clase de acción WebDriver y realizar clic derecho. el siguiente es la sintaxis:

Actions action = new Actions(driver).contextClick(element); 
action.build().perform(); 

A continuación se presentan los pasos que hemos seguido en el ejemplo:

  1. Identificar el elemento
  2. Espere a que la presencia del elemento
  3. Ahora realice Contexto clic
  4. Después de eso tenemos que seleccionar el enlace requerido.

paquete com.pack.botón derecho del ratón;

import org.openqa.selenium.Alert; 
    import org.openqa.selenium.By; 
    import org.openqa.selenium.NoSuchElementException; 
    import org.openqa.selenium.StaleElementReferenceException; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.WebElement; 
    import org.openqa.selenium.firefox.FirefoxDriver; 
    import org.openqa.selenium.interactions.Actions; 
    import org.openqa.selenium.support.ui.ExpectedConditions; 
    import org.openqa.selenium.support.ui.WebDriverWait; 
    import org.testng.Assert; 
    import org.testng.annotations.AfterClass; 
    import org.testng.annotations.BeforeClass; 
    import org.testng.annotations.Test; 

public class RightClickExample { 

    WebDriver driver; 

    String URL = "http://medialize.github.io/jQuery-contextMenu/demo.html"; 

    @BeforeClass 
    public void Setup() { 
     driver = new FirefoxDriver(); 
     driver.manage().window().maximize(); 
    } 

    @Test 
    public void rightClickTest() { 
     driver.navigate().to(URL); 
     By locator = By.cssSelector(".context-menu-one.box"); 
     WebDriverWait wait = new WebDriverWait(driver, 5); 
     wait.until(ExpectedConditions.presenceOfElementLocated(locator)); 
     WebElement element=driver.findElement(locator); 
     rightClick(element); 
     WebElement elementEdit =driver.findElement(By.cssSelector(".context-menu-item.icon.icon-edit>span")); 
     elementEdit.click(); 
     Alert alert=driver.switchTo().alert(); 
     String textEdit = alert.getText(); 
     Assert.assertEquals(textEdit, "clicked: edit", "Failed to click on Edit link"); 
    } 

    public void rightClick(WebElement element) { 
     try { 
      Actions action = new Actions(driver).contextClick(element); 
      action.build().perform(); 

      System.out.println("Sucessfully Right clicked on the element"); 
     } catch (StaleElementReferenceException e) { 
      System.out.println("Element is not attached to the page document " 
        + e.getStackTrace()); 
     } catch (NoSuchElementException e) { 
      System.out.println("Element " + element + " was not found in DOM " 
        + e.getStackTrace()); 
     } catch (Exception e) { 
      System.out.println("Element " + element + " was not clickable " 
        + e.getStackTrace()); 
     } 
    } 

    @AfterClass 
    public void tearDown() { 
     driver.quit(); 
    } 


} 
0

Así es como podría hacer clic en el cuarto elemento en el Right click window.

Actions myAction = new Actions(driver); 
myAction.contextClick(driver.findElement(By.xpath("//ul/li[1]/a/img"))).build().perform(); 
myAction.sendKeys(Keys.ARROW_DOWN).build().perform(); 
myAction.sendKeys(Keys.ARROW_DOWN).build().perform(); 
myAction.sendKeys(Keys.ARROW_DOWN).build().perform(); 
myAction.sendKeys(Keys.ARROW_DOWN).build().perform(); 
myAction.sendKeys(Keys.ENTER).build().perform(); 

Esperanza esto ayuda

1

* El uso de la clase del robot que puede hacer esto, trate siguiente código:

Actions action = new Actions(driver); 
action.contextClick(WebElement).build().perform(); 
Robot robot = new Robot(); 
robot.keyPress(KeyEvent.VK_DOWN); 
robot.keyRelease(KeyEvent.VK_DOWN); 
robot.keyPress(KeyEvent.VK_ENTER); 
robot.keyRelease(KeyEvent.VK_ENTER);* 
0

clic derecho se puede lograr utilizando Java ejecutor guión también (en los casos en que la acción clase no es compatible):

JavascriptExecutor js = (JavascriptExecutor) driver; 

String javaScript = "var evt = document.createEvent('MouseEvents');" 
       + "var RIGHT_CLICK_BUTTON_CODE = 2;" 
       + "evt.initMouseEvent('contextmenu', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, RIGHT_CLICK_BUTTON_CODE, null);" 
       + "arguments[0].dispatchEvent(evt)"; 

js.executeScript(javaScript, element); 
Cuestiones relacionadas