处理Selenium中的TAB

时间:2016-06-04 13:29:50

标签: java selenium selenium-webdriver

我正在尝试在两个标签之间切换,并找到以下代码

 ArrayList<String> tabs2 = new ArrayList<String> (page.getWindowHandles());
     System.out.println(tabs2.size());
        page.switchTo().window(tabs2.get(1));
        page.close();
        page.switchTo().window(tabs2.get(0));

我有一个疑问。我的窗口是相同的,因此page.getWindowHandles()只返回一个句柄。 tabs2.size为1,因此page.switchTo().window(tabs2.get(1));提供异常ArrayIndexOutOfBound

我在这篇文章switch tabs using Selenium WebDriver with Java中找到了类似的代码,但对我来说这段代码给出了异常。

2 个答案:

答案 0 :(得分:0)

只需尝试添加一行代码,以确保在浏览器中打开两个或更多选项卡:

page.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
  

请注意,要发送的实际密钥取决于您的操作系统,例如Mac   使用Keys.COMMAND + t代替Keys.CONTROL + t

发布此信息,您使用的代码片段似乎适合切换标签:

ArrayList<String> tabs2 = new ArrayList<String> (page.getWindowHandles());
System.out.println(tabs2.size());
page.switchTo().window(tabs2.get(1));
page.close();
page.switchTo().window(tabs2.get(0));

注意 :我假设页面这里是WebDriver实例本身。

答案 1 :(得分:0)

protected void switchTabsUsingPartOfUrl(String platform) {
        String currentHandle = null;
        try {
            final Set<String> handles = driver.getWindowHandles();
            if (handles.size() > 1) {
                currentHandle = driver.getWindowHandle();
            }
            if (currentHandle != null) {
                for (final String handle : handles) {
                    driver.switchTo().window(handle);
                    if (currentUrl().contains(platform) && !currentHandle.equals(handle)) {
                        break;
                    }
                }
            } else {
                for (final String handle : handles) {
                    driver.switchTo().window(handle);
                    if (currentUrl().contains(platform)) {
                        break;
                    }
                }
            }
        } catch (Exception e) {
            System.out.println("Switching tabs failed");
        }
    }

调用此方法并将参数传递给要切换到的选项卡的URL的子字符串