2017-09-23 29 views
1

我想右鍵單擊一個鏈接並在上下文菜單中選擇第一個選項。右鍵單擊在硒驅動程序中不起作用

我試着用下面的五種方法沒有任何作用。所有方法都以正常方式點擊 鏈接,但未發生上下文點擊。

有人可以指出這有什麼不對嗎?

我使用的...硒-3.4.0,FF 53的環境中,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); 


     } 
    } 

方法6部分工作手段...上下文點擊是發生在屏幕上而不是在元件。

在方法7,I手動輸入X,Y位置其工作...

其原因方法6不工作時的x,y從的getLocation方法獲得涉及瀏覽器,但機器人類工作相關篩選..

這裏我的問題是如何讓元素與屏幕

感謝的確切位置 拉維中號

+0

可以使用機器人類 –

+0

我試着用機器人class..context點擊正在發生但不在元素上。你可以在上面的代碼中看到方法6和方法7 .. –

回答

0

請嘗試,

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

或請通過改變RETURN試圖進入如下圖所示,

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

我試過以上兩種方法..但沒有運氣.. –

+0

好的。讓我創建一個完整的工作示例,並將從我的GitHub中分享它。 –

+0

@RaviMakam我在我的機器上嘗試過相同的解決方案,並且工作正常。我已經在GitHub上傳了示例代碼。請嘗試下載並檢查 - https://github.com/vnathv/seleniummouserightclick.git。我的代碼示例是用C#編寫的,但它在Java中也是一樣的。 –

0

使用本:

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

其正常的左鍵單擊而不是上下文單擊頁面加載在同一頁面中.. –