2012-07-11 19 views
19

Używam oprogramowania Web Selver. Nie jestem w stanie wybrać (powiedzmy 2) opcji z Otworzyłem Opcje po kliknięciu prawym przyciskiem myszy.Wybierz opcję z menu prawego przycisku w programie Selenium Webdriver - Java

W moim bieżącym kodzie jestem w stanie kliknąć prawym przyciskiem myszy na webElement, ale nie mogłem wybrać opcji z listy, która jest otwierana po kliknięciu prawym przyciskiem, ponieważ znika automatycznie.

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

Dzięki temu kodowi mogę kliknąć prawym przyciskiem myszy, ale menu z prawym przyciskiem myszy automatycznie znika. Chcę wybrać opcję Powiedz 2 opcję z menu prawego przycisku myszy.

Proszę o pomoc!

Odpowiedz

27

aby wybrać pozycję z menu kontekstowego, trzeba po prostu przesuń kursor pozycje myszy przy użyciu zdarzenia Key down, takiego jak to: -

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

mam nadzieję, że to zadziała. Miłego dnia :)

+0

@ Neeraj- To działa dobrze .... Wielkie dzięki! –

1

Być może trzeba przesunąć mysz do żadnej konkretnej lokalizacji po kliknięciu kontekstowego() jak ta -

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

Aby zrozumieć, jak moveByOffset (x, y) prace wyglądają here;

Mam nadzieję, że to zadziała. Będziesz musiał obliczyć wartości przesunięcia dla x i y;

Najlepszym sposobem byłoby znalezienie rozmiaru każdego przycisku opcji po kliknięciu prawym przyciskiem myszy, a następnie kliknięcie drugiej opcji.

x = szerokość przycisku opcji/2

y = 2 * (rozmiar każdego przycisku opcji)

+0

@ Hari Reddy - Dzięki za odpowiedź, W obecnym problemie rozwiązania jest to, że nie jestem w stanie t o uzyskać wartości przesunięcia, ponieważ "Opcje menu prawego przycisku" nie mogą być sprawdzane w firebug. Nie można więc uzyskać przesunięć w Firebug> layout. –

+0

Tak, rozumiem twój problem. Nawet nie jestem pewien, jak możemy znaleźć szerokość opcji, które otrzymujemy po kliknięciu prawym przyciskiem myszy. Czy możesz spróbować kilku sposobów na trafienie i próbowanie, spróbuj zwiększyć o 5 lub 10. Daj mi znać, co się stanie? –

0

Oto kod dla kliknięcia prawym przyciskiem myszy na stronie internetowej.

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

to lepsze podejście, a jego sukces:

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

może działać w niestandardowych menu, ale nie w menu przeglądarki Chrome – iirekm

3

Weźmiemy pomocy klasy akcji WebDriver i wykonać Prawy klik. poniżej jest składnia:

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

Poniżej przedstawiono kroki, jakie następuje w tym przykładzie:

  1. Wskaż element
  2. Poczekaj na obecność elementu
  3. Teraz wykonywania Context kliknij
  4. Po tym musimy wybrać wymagane łącze.

pakiet 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

Oto jak mógłbym kliknąć na czwartym elemencie w 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(); 

Nadzieja to pomaga

1

* Korzystanie z klasy Robot Można to zrobić, spróbuj poniższy kod:

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

kliknij prawym przyciskiem myszy można osiągnąć za pomocą skryptu wykonawcę Java, jak również (w przypadkach, gdy działania klasa nie jest obsługiwana):

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); 
Powiązane problemy