如何使用操作 class 在相邻 window 或选项卡中打开 link(上下文单击元素->sendkeys ArrowDown ->sendkeys Enter)

How to open a link in the adjacent window or tab using actions class (Context click on element->sendkeys ArrowDown ->sendkeys Enter)

我想在新 window 中打开一个应用程序 link。使用操作 class 正在打开 link 我目前正在使用的相同 window。

我已经尝试在多个应用程序的 chrome 驱动程序和 firefox 驱动程序上使用 Actions class 和以下代码,但 none 有效。

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();

我的期望是 link 应该在新的 window 中打开,因为我在上下文单击后尝试 select "Open link in new window" 选项。但是每次 link 都在同一个 window.

中打开

要在相邻 tab/window 中打开文本为 Selenium Questions 的 link,您可以使用以下解决方案:

  • 代码块:

    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();
    
  • 浏览器快照:

这里有两个在新 window(不是选项卡)中打开 link 的选项。

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

contextClick - contextClick() 可能反复无常,在某些环境中它只是拒绝获得与在其他环境中相同的结果。
不过,如果您想尝试使用它,请发送 "w" 键 - 这是 "Open In New Window":

的快捷方式
action.contextClick(el).perform();
action.sendKeys("w").perform();  // in two steps

Shift-click - 新建 window 的快捷方式是 shift-click,而不是 ctrl-click 新标签。这种方法与 contextClick() 相比具有更高的可重复率 - 只要浏览器支持它。

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