如何使用动作类在相邻窗口或选项卡中打开链接(上下文单击element-> sendkeys ArrowDown-> sendkeys Enter)

时间:2019-04-12 11:45:53

标签: java selenium selenium-webdriver webdriver webdriverwait

我想在新窗口中打开应用程序的链接。使用动作类可以在我当前所在的同一窗口中打开链接。

我尝试在具有多个应用程序的chrome驱动程序和firefox驱动程序上使用带有以下代码的Actions类,但均无效果。

System.setProperty("webdriver.gecko.driver", "D:\\MySpace\\AmozonEcomm\\Dependencies\\geckodriverv21.exe");
WebDriver driver = new FirefoxDriver(); //Creating an instance of Chrome driver
driver.manage().window().maximize();
driver.get("http://automate-apps.com/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

Actions action = new Actions(driver);
action.contextClick(driver.findElement(By.partialLinkText("Selenium Questions"))).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();

我的期望是,该链接应在新窗口中打开,因为在上下文单击后我试图选择“在新窗口中打开链接”选项。但是evrytime链接在同一窗口中打开。

2 个答案:

答案 0 :(得分:1)

要在相邻的标签/窗口中打开文字为 Selenium Questions (硒问题)的链接,可以使用以下解决方案:

  • 代码块:

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("http://automate-apps.com/");
    WebElement elem = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Selenium Questions")));
    new Actions(driver).keyDown(Keys.CONTROL).click(elem).keyUp(Keys.CONTROL).build().perform();
    
  • 浏览器快照:

newTAB

答案 1 :(得分:1)

有两个选项可用于在新的窗口(而非标签页)中打开链接。

WebElement el = driver.findElement(By.partialLinkText("Selenium Questions"));
Actions action = new Actions(driver);

contextClick -contextClick()可能会反复无常,在某些环境中,它只是拒绝获得与其他环境中相同的结果。
仍然,如果您要尝试使用它,请发送“ w”键-这是“在新窗口中打开”的快捷方式:

action.contextClick(el).perform();
action.sendKeys("w").perform();  // in two steps

按住Shift键单击-新窗口的快捷方式是按住Shift键单击,而不是按住Ctrl键单击新选项卡。只要浏览器支持,此方法的重复率就比contextClick()高。

action.keyDown(Keys.SHIFT).click(el).keyUp(Keys.SHIFT).build().perform();