当前位置: 首页 > 面试题库 >

使用Selenium切换活动标签页

须彭亮
2023-03-14
问题内容

我已经开发了这段代码,用于将所有搜索结果打开到新标签中:

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
results.get(i).sendKeys(selectLinkOpeninNewTab);

for (int i = 0; i < results.size(); i++)
{
    ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
    driver.switchTo().window(tabs2.get(1));
    driver.close();
    driver.switchTo().window(tabs2.get(0));
}

我想要的是当我打开所有带有搜索结果的选项卡时,我想在所有选项卡之间切换并延迟2秒。

我该如何实施?


问题答案:

试试这个代码,

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class TabSwitching {

    public static void main(String[] args) throws InterruptedException, AWTException {
        System.setProperty("webdriver.chrome.driver", "D:/WorkSpace/Driver/chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.get("http://www.google.com/xhtml");
        Thread.sleep(5000);
        WebElement searchBox = driver.findElement(By.name("q"));
        searchBox.sendKeys("Software testing");
        searchBox.submit();

        System.out.println("Current Url: " + driver.getCurrentUrl());

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("h3.r a")));

        List<WebElement> results = driver.findElements(By.xpath("//h3[@class='r']/a"));

        for (WebElement ele : results) {
            String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
            ele.sendKeys(selectLinkOpeninNewTab);
        }
        Thread.sleep(5000);
        ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
        System.out.println(tabs2.size());

        for (int i = tabs2.size()-1; i>=0; i--) {
            Thread.sleep(2000);
            driver.switchTo().window(tabs2.get(i));
            Robot robot = new Robot();

            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_TAB);
            robot.keyRelease(KeyEvent.VK_TAB);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            System.out.println(driver.getTitle() + "i: " + i);
            driver.close();
        }
    }
}


 类似资料:
  • 我正在使用Selenium和Java,我正在使用这段代码在Mozilla中的选项卡之间切换,但它打开了一个新窗口而不是新选项卡。如何解决这个问题,或者有没有另一种在选项卡之间切换的方法?

  • 我正在使用: Chrome55.0.2 Selenium WebDRiver 3.0.1与ChromeDRiver C#4.6.1(VS2015社区版) 我正在编写打开Chrome的自动化代码,打开一个选项卡,并导航到一个主页面URL。这个主页有我解析生成二级页面URL的信息。我的问题是,我不能编写在二级页面加载后切换回主页选项卡的代码,也不能编写从不离开主页的代码。我将解释我所追求的两个选择:

  • 这是我写的代码,以打开一个新标签在已经打开Chrome但它是重定向到第二个url在现有的标签只有。 我想打开一个新选项卡并加载“www.mailinator.com”的url 有人能帮我吗?

  • 问题内容: 我们开发了一个Chrome扩展程序,我想用Selenium测试我们的扩展程序。我创建了一个测试,但是问题是我们的扩展程序在安装后会打开一个新选项卡,我认为我从另一个选项卡中得到了例外。是否可以切换到我正在测试的活动标签?另一个选择是先禁用扩展名,然后登录到我们的网站,然后再启用该扩展名。可能吗?这是我的代码: 测试失败,原因是,因为在新选项卡(由扩展名打开)中,“登录”不可见(我认为仅

  • 问题内容: 我们正在编写包含4个标签的应用程序:地图,人物,地点,事件。应用程序中的人物,地点和事件在地图上显示为图标。默认情况下,“人员”,“位置”和“事件”选项卡分别显示一个自定义呈现的列表视图,分别显示所有“人员”,“位置”和“事件”。 替代文字http://web6.twitpic.com/img/37202700-f92052dc474b74e1760edda1c47f6940.4adc

  • 当我尝试从一个活动()切换到另一个活动()时出错。我做错了什么?我的代码没有错误。 以下是日志猫的内容: E/AndroidRuntime(787): FATAL EXCEPTION: main E/AndroidRuntime(787): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.intellig