如何打开多个选项卡并通过Selenium和Webdriver在之间切换?

时间:2018-08-16 12:46:07

标签: java selenium selenium-webdriver webdriver window-handles

我用谷歌搜索了此代码,但未获得正确的代码。我有一个场景,我们的应用程序有5个模块,我想在每个选项卡上打开它,因为我需要多次在它们之间切换

这不起作用:

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

3 个答案:

答案 0 :(得分:0)

使用getWindowHandles可以多次切换url。在这里,我首先切换url并标识选项卡,每个选项卡都应该是唯一的url,我们可以通过url进行标识。

   for (String window : driver.getWindowHandles()) {
    driver.switchTo().window(window);
    if (driver.getCurrentUrl().contains("google.com")) {    
     //Your operation     
    }       
    if (driver.getCurrentUrl().contains("yahoo.com")) {
    }
    //Your operation
    }

例如,您在两个标签页中打开google和yahoo,然后可以切换标签页并确定标签页并在其中进行任何操作。

希望对您有帮助

答案 1 :(得分:0)

这是打开多个选项卡并通过Selenium Webdriver在它们之间切换的示例示例:

  • 代码块:

    import java.util.Set;
    
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class WINDOW_HANDLE_ITERATE_Firefox 
    {
        public static void main(String[] args) throws Exception 
        {
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver =  new FirefoxDriver();
            driver.get("http://www.google.com");
            String parent_window = driver.getWindowHandle();
            System.out.println("Parent Window Handle is: "+driver.getWindowHandle());
            System.out.println("Page Title is: "+driver.getTitle());
            ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
            new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
            Set<String> allWindows_1 = driver.getWindowHandles();
            System.out.println("Total Windows: "+allWindows_1.size());
            for(String hand1:allWindows_1)
            if(!parent_window.equals(hand1))
            {
                driver.switchTo().window(hand1);
                new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Facebook"));
                String first_child_window = driver.getWindowHandle();
                System.out.println("First Child Window Handle is: "+first_child_window);
                System.out.println("First Child Window Page Title is: "+driver.getTitle());
                driver.close();
            }
            driver.switchTo().window(parent_window);
            System.out.println("Current Window Handle is : "+driver.getWindowHandle()+ " which is same as "+parent_window +", which is the parent window handle" );
            driver.quit();
        }
    }
    
  • 控制台输出:

    INFO: Detected dialect: W3C
    Parent Window Handle is: 6442450945
    Page Title is: Google
    Total Windows: 2
    First Child Window Handle is: 6442450949
    First Child Window Page Title is: Facebook – log in or sign up
    Current Window Handle is : 6442450945 which is same as 6442450945, which is the parent window handle
    

答案 2 :(得分:0)

您可以尝试

要使用JavascriptExecutor打开新标签,

((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));

将根据索引对标签进行控制:

driver.switchTo().window(tabs.get(1));

主选项卡上的驱动程序控件:

driver.switchTo().window(tabs.get(0));