2017-09-23 2 views
1

Ich möchte mit der rechten Maustaste auf einen Link klicken und wählen Sie die erste Option im Kontextmenü.Rechtsklick funktioniert nicht in Selen Web-Treiber

Ich versuchte mit unten fünf Methoden nichts funktioniert. Alle Methoden klicken auf den Link in normaler Weise, aber nicht passiert Kontext klicken.

Kann jemand etwas Licht auf das werfen, was falsch ist?

ich die Umgebung bin mit ... Selen-3.4.0, 53 FF Windows 7

 package WebDriverAdvancedPrograms; 


     import java.awt.AWTException; 
     import java.awt.Robot; 
     import java.awt.event.KeyEvent; 
     import java.util.concurrent.TimeUnit; 

     import org.openqa.selenium.*; 
     import org.openqa.selenium.firefox.FirefoxDriver; 
     import org.openqa.selenium.interactions.Action; 
     import org.openqa.selenium.interactions.Actions; 

     public class RightClick { 

      public static void main(String[] args) throws InterruptedException, AWTException { 
       System.setProperty("webdriver.gecko.driver", "G:\\Selenium\\geckodriver-v0.16.0-win64\\geckodriver.exe"); 
       WebDriver driver = new FirefoxDriver(); 
       driver.get("http://facebook.com"); 
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

       WebElement element=driver.findElement(By.linkText("Forgotten account?")); 


    //  // Method 1 - NOT WORKING 
    //  Actions builder = new Actions(driver); 
    //  Action mouseOverHome = builder 
    //    .moveToElement(element) 
    //    .contextClick(element) 
    //    .sendKeys(Keys.DOWN) 
    //    .sendKeys(Keys.ENTER) 
    //    .build(); 
    //  mouseOverHome.perform(); 

    // Method 2 - NOT WORKING 
    //  Actions builder = new Actions(driver); 
    //  Action mouseOverHome = builder 
    //    .moveToElement(element) 
    //    .contextClick(element) 
    //    .sendKeys(Keys.ARROW_DOWN) 
    //    .sendKeys(Keys.RETURN) 
    //    .build(); 
    //  mouseOverHome.perform(); 

    // Method 3 - NOT WORKING 
    //  Actions builder = new Actions(driver); 
    //  Action mouseOverHome = builder 
    //    .contextClick(element) 
    //    .sendKeys(Keys.ARROW_DOWN) 
    //    .sendKeys(Keys.RETURN) 
    //    .build(); 
    //  mouseOverHome.perform(); 

    // Method 4 - NOT WORKING 
    //  Actions builder = new Actions(driver); 
    //  Action mouseOverHome = builder 
    //    .contextClick(element) 
    //    .sendKeys(Keys.ARROW_DOWN) 
    //    .sendKeys(Keys.ARROW_UP) 
    //    .sendKeys(Keys.RETURN) 
    //    .build(); 
    //  mouseOverHome.perform(); 


    //  // Method 5 - NOT WORKING 
      Actions action= new Actions(driver); 
      action.contextClick(element).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.RETURN).build().perform(); 



    // Method 6 - Partially WORKING 
    Point p = element.getLocation(); 
    int x = p.getX(); 
    int y = p.getY(); 

    Robot r=new Robot(); 
    r.mouseMove(x, y); 
    r.mousePress(InputEvent.BUTTON3_MASK); 
    r.mouseRelease(InputEvent.BUTTON3_MASK); 
    r.keyPress(KeyEvent.VK_DOWN); 
    r.keyRelease(KeyEvent.VK_DOWN); 

    r.keyPress(KeyEvent.VK_ENTER); 
    r.keyRelease(KeyEvent.VK_ENTER); 

    //Method 7 - WORKING 
    Robot r=new Robot(); 
    r.mouseMove(1000, 145); 
    r.mousePress(InputEvent.BUTTON3_MASK); 
    r.mouseRelease(InputEvent.BUTTON3_MASK); 
    r.keyPress(KeyEvent.VK_DOWN); 
    r.keyRelease(KeyEvent.VK_DOWN); 

    r.keyPress(KeyEvent.VK_ENTER); 
    r.keyRelease(KeyEvent.VK_ENTER); 


     } 
    } 

Methode 6 ist teilweise Arbeitsmittel ... Context Klick auf dem Bildschirm passiert, aber nicht auf Element.

In Methode 7 trat manuell I x, y-Position seiner Arbeits ...

Der Grund für Verfahren 6 nicht funktioniert x ist, y von getLocation Verfahren zu bekommen Browser verwendet ist, aber robot Klasse arbeitet verwandte auszusortieren ..

Hier meine Frage ist, wie genaue Lage von Element zu Bildschirm

Dank Ravi M mit Bezug zu bekommen

+0

Sie Roboter Klasse –

+0

Ich habe versucht, mit Roboter class..context Klick können geschieht aber nicht auf dem Element. können Sie die Methode 6 und Methode 7 im obigen Code sehen .. –

Antwort

0

Bitte versuchen Sie,

Actions builder = new Actions(driver); 
builder.ContextClick(element).Build().Perform(); 

oder versuchen Sie es mit der RETURN-Wechsel wie unten ENTER,

Actions action= new Actions(driver); 
action.contextClick(element).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform(); 
+0

Ich habe versucht, oben zwei Methoden ..aber kein Glück .. –

+0

ok. Lassen Sie mich ein vollständiges Arbeitsbeispiel erstellen und werde es von meinem GitHub teilen. –

+0

@RaviMakam Ich habe die gleiche Lösung auf meiner Maschine versucht und funktioniert gut. Ich habe den Beispielcode in GitHub hochgeladen. Bitte versuchen Sie es herunterzuladen und überprüfen Sie - https://github.com/vnathv/seleniummouserightclick.git. Mein Codebeispiel ist in C#, aber es wird auch in Java dasselbe sein. –

0

Verwendung dieses:

Actions right_action = new Actions(chromeDriver); 
right_action.ContextClick(element_name).SendKeys(Keys.ArrowDown).SendKeys(Keys.Enter).Build().Perform(); 
+0

es tut normalen linken Klick nicht den Kontext klicken, da die Seite auf der gleichen Seite geladen wird .. –

Verwandte Themen