2012-07-11 9 views
19

Utilizzo un web driver Selenium. Non sono in grado di selezionare (diciamo 2a) opzione dalle Opzioni aperte con il tasto destro del mouse.Selezionare un'opzione dal menu di scelta rapida in Selenium Webdriver - Java

Nel mio codice corrente sono in grado di fare clic con il tasto destro su webElement ma non posso selezionare un'opzione dall'elenco che viene aperto dopo il clic destro, poiché scompare automaticamente.

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

Quindi, con questo codice sono in grado di fare clic destro, ma il menu del tasto destro scompare automaticamente. Voglio selezionare dire 2a opzione dal menu del tasto destro.

Si prega di aiuto !!!

risposta

27

per selezionare la voce dal menu contestuale, si deve spostare solo la tua posizioni del mouse con l'uso di Key down evento come questo: -

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

spero che questo funzioni per voi. Buona giornata :)

+0

@ Neeraj- Funziona bene .... Grazie mille !!! –

1

Potrebbe essere necessario spostare il mouse in qualsiasi posizione particolare dopo il contesto click() come questo -

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

Per capire come moveByOffset (x, y) opere guardano here;

Spero che funzioni. Dovrai calcolare i valori di offset per x e y;

modo migliore sarebbe quello di trovare la dimensione di ogni pulsante di opzione dopo aver fatto clic destro e quindi se si fa clic sulla seconda opzione.

x = larghezza del pulsante di opzione/2

y = 2 * (dimensione di ogni pulsante di opzione)

+0

@ Hari Reddy - Grazie per la risposta, nel problema di soluzione corrente è che non sono in grado di o ottenere i valori di offset perché "Opzioni del menu clic destro" non possono essere ispezionati in firebug. Quindi Non è possibile ottenere gli offset in Firebug> layout. –

+0

sì capisco il tuo problema. Anche io non sono sicuro di come possiamo trovare la larghezza delle opzioni che otteniamo dopo il clic destro. Puoi provare un po 'di successo e provare, incrementare di 5 o 10. Fammi sapere cosa succede? –

0

Ecco il codice per il clic destro su un webelement.

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

questo è meglio approccio e il suo successo:

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

funziona forse per i menu personalizzati ma non per il menu del browser Chrome – iirekm

3

prenderemo l'aiuto di Class Action WebDriver ed eseguire Right Click. il sotto è la sintassi:

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

Di seguito sono riportati i passaggi che abbiamo seguito l'esempio:

  1. Identificare l'elemento
  2. Attendere che la presenza di Element
  3. Ora eseguire Contesto click
  4. Successivamente è necessario selezionare il collegamento richiesto.

pacchetto com.pack.rightclick;

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

Ecco come è stato possibile fare clic sul quarto elemento nello 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(); 

Spero che questo aiuti

1

* Usando classe Robot si può fare questo, Prova seguente codice:

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 destro può essere realizzato utilizzando Java esecutore script come bene (nei casi in cui l'azione la classe non è supportata):

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); 
Problemi correlati