如何使用 Selenium 在同一浏览器中打开新标签页并在它们之间切换?
seleniumautomation testingtesting tools
我们可以使用 Selenium WebDriver 在同一浏览器中打开新标签页并在它们之间切换。首先,要在同一浏览器中打开新标签页,我们需要借助 `Keys.chord` 和 `sendKeys` 方法。
`Keys.CONTROL 和 `Keys.ENTER` 参数会传递给 `Keys.chord` 方法。该方法会返回一个字符串值,并将其作为参数传递给 `sendKeys` 方法。
语法
String n = Keys.chord(Keys.CONTROL,Keys.ENTER);
driver.findElement(By.id("open-tab")).sendKeys(n);
打开第二个标签页后,使用 `getWindowHandles` 方法将所有窗口句柄 ID 保存到一个集合中。要将 WebDriver 对象的焦点切换到新标签页,可以使用 `switchTo().window` 方法。
要将 WebDriver 的焦点切换到新标签页,需要将新标签页的窗口句柄 ID 作为参数传递给 `switchTo().window` 方法。`getWindowHandle` 方法用于获取当前浏览器窗口的窗口句柄 ID。
让我们在同一个浏览器的新标签页中打开"Team"链接。

示例
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import java.util.List;
import org.openqa.selenium.Keys;
import java.util.ArrayList;
public class SwitchNewTab{
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver",
"C:\Users\ghs6kor\Desktop\Java\chromedriver.exe");
WebDriver driver = new ChromeDriver();
//隐式等待
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("https://www.tutorialspoint.com/about/about_careers.htm");
// 方法 Keys.chord
String n = Keys.chord(Keys.CONTROL, Keys.ENTER);
//在新标签页中打开链接
driver.findElement(By.linkText("Team")).sendKeys(n);
Thread.sleep(8000);
// store window handle ids
ArrayList<String> w = new ArrayList<String>(driver.getWindowHandles());
//切换到打开的标签页
driver.switchTo().window(w.get(1));
System.out.println("New tab title: " + driver.getTitle());
//切换到第一个标签页
driver.switchTo().window(w.get(0));
System.out.println("First tab title: " + driver.getTitle());
driver.quit();
}
}
输出


