在 Selenium Webdriver 中使用 Ctrl + 单击组合打开一个新选项卡

Posted

技术标签:

【中文标题】在 Selenium Webdriver 中使用 Ctrl + 单击组合打开一个新选项卡【英文标题】:Opening a new tab using Ctrl + click combination in Selenium Webdriver 【发布时间】:2018-02-22 08:54:46 【问题描述】:

我正在尝试使用 ctrl + 单击链接以在新选项卡中打开它。这在 Chrome 58 中运行良好。请在下面找到代码:

action.keyDown(Keys.CONTROL).click(driver.findElement(By.xpath
("//section[@class='filmStrip__basic']//a[text()='En savoir 
plus']"))).keyUp(Keys.CONTROL).build().perform(); 

我在 IE、Firefox 和 Safari 上使用相同的代码,但收到以下错误:

Firefox 54:链接在同一个选项卡中打开。 IE 11:什么都没有发生..控件正在移动到下一行 Safari:action.keyDown-Unrecognized 命令异常

对于任何一种浏览器的帮助也很感激。

谢谢

【问题讨论】:

【参考方案1】:

当您尝试单击位于<a> 标记内的链接时,您可以使用linkText 定位器而不是xpath。以下是打开 url http://www.google.com、验证 Page Title、使用 Actions 类单击 Gmail 链接以在新选项卡中打开 https://accounts.google.com 的示例代码。

String URL="http://www.google.com";
System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver =  new FirefoxDriver();
driver.get(URL);
System.out.println("Page Title is : "+driver.getTitle());
WebElement link = driver.findElement(By.linkText("Gmail"));
Actions newTab = new Actions(driver); 
newTab.keyDown(Keys.CONTROL).click(link).keyUp(Keys.CONTROL).build().perform();

您可以在How to open a link embed in web element in the main tab, in a new tab of the same window using Selenium Webdriver中找到相关的基于Python的解决方案

【讨论】:

【参考方案2】:

试试这个方法....

// specify chromedriver.exe directory path and replace in "driverPath"

            String driverPath = "C:/Users......";
            WebDriver driver;
            System.setProperty("webdriver.chrome.driver", driverPath + "chromedriver.exe");
            driver = new ChromeDriver();

            System.out.println("lanuching 1st url in tab1");

            driver.navigate().to(
                    "https://amazon.com");

            System.out.println("lanuched 1st url in tab1");
            Thread.sleep(30000);
    ((javascriptExecutor) driver).executeScript(
                    "window.open('http://ebay.com');");
            Thread.sleep(20000);
            Set<String> allwh = driver.getWindowHandles();
            System.out.println(allwh.size());
            for (String v : allwh) 
                System.out.println(v);
                driver.switchTo().window(v);
                String title = driver.getTitle();
                System.out.println("2nd url in tab2" + title);

【讨论】:

【参考方案3】:

另一种方法是使用javascript执行器:

JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("window.open('','_blank');");

至于您的问题,我也遇到了,直到找到此解决方法后才发现任何有用的东西。 我什至试过:solution with ctrl + enter

【讨论】:

我也想测试超链接的功能。所以,需要实际点击链接才能打开它。 为什么不使用click 点击是在同一个标​​签中打开它。我想一次性测试整个流程。谢谢 然后只需像上面一样打开新标签(使用相同的路径)并单击此标签而不是主标签,类似于“克隆”标签

以上是关于在 Selenium Webdriver 中使用 Ctrl + 单击组合打开一个新选项卡的主要内容,如果未能解决你的问题,请参考以下文章

在 selenium 中使用“webdriver.Chrome()”时出错 [重复]

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?

使用 Java 的 Selenium WebDriver (Selenium 2) 中 selenium.refresh() 的等效代码

无法使用 Selenium 和页面工厂在页面对象类中调用“org.openqa.selenium.WebDriver.getTitle()”

如何在 Java 中使用 Selenium WebDriver (Selenium 2) 输入文本框?

如何在 ruby​​ 中使用 Selenium WebDriver (selenium 2.0) 客户端设置选项