【问题标题】:Selenium webdriver switchin tabSelenium webdriver 切换选项卡
【发布时间】:2018-12-15 00:32:14
【问题描述】:
我无法在新标签中打开谷歌,请查看此代码:
public static void main (String [] args) throws InterruptedException, AWTException
{
System.setProperty("webdriver.chrome.driver","C://Users//vbisht//Downloads//chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.navigate().to("https://www.google.co.in/");
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
//Thread.sleep(10000);
//driver.navigate().refresh();*/
ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs.get(1)); //switches to new tab
driver.navigate().to("https://www.google.co.in/");
【问题讨论】:
标签:
selenium
tabs
webdriver
switch-statement
【解决方案1】:
String parentWindowHandler=driver.getWindowHandle();// Store your parent window
String subWindowHandler = null;
Set<String> handles = driver.getWindowHandles(); // get all window handles
Iterator<String> iterator = handles.iterator();
while (iterator.hasNext()){
subWindowHandler = iterator.next();
}
driver.switchTo().window(subWindowHandler); // switch to popup window
希望对你有所帮助。
【解决方案2】:
试试下面的代码,
下面的代码将在新标签中打开链接。
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
下面的代码将打开一个空的新标签。
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
【解决方案3】:
您可以简单地使用 Javascript 执行器打开它,而不是使用机器人类
public static void main (String [] args) throws InterruptedException, AWTException { System.setProperty("webdriver.chrome.driver","C://Users//vbisht//Downloads//chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.navigate().to("https://www.google.co.in/");
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs.get(1)); //switches to new tab
driver.navigate().to("https://www.google.co.in/");
}
【解决方案4】:
要在两个不同的 TAB 中打开两个不同的 url,一旦你开始打开一个新的标签/窗口,你必须诱导 WebDriverWait 然后收集窗口句柄,最后遍历窗口句柄,然后switchTo().window(newly_opened),如下例所示:
-
示例代码:
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe.exe");
WebDriver driver = new InternetExplorerDriver();
driver.get("http://www.google.com");
String first_tab = driver.getWindowHandle();
System.out.println("Working on Google");
((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
WebDriverWait wait = new WebDriverWait(driver,5);
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> s1 = driver.getWindowHandles();
Iterator<String> i1 = s1.iterator();
while(i1.hasNext())
{
String next_tab = i1.next();
if (!first_tab.equalsIgnoreCase(next_tab))
{
driver.switchTo().window(next_tab);
System.out.println("Working on Facebook");
}
}
-
控制台输出:
Working on Google
Working on Facebook