Selenium switch focus to tab, which opened after clicking link

后端 未结 3 1405
小鲜肉
小鲜肉 2020-11-27 08:44

For automation purposes, I am working on creating a script that finds a row in a table. This row is clickable and opens a new tab/adress.

With selenium, I am now ab

相关标签:
3条回答
  • 2020-11-27 09:05

    To properly switch to the newly opened Tab you need to induce WebDriverWait for the New Tab to render and then through a for() loop you need to iterate through the available WindowHandles and invoke switchTo().window() with the WindowHandle which is not the previous TAB through the following code block :

    String first_handle = driver.getWindowHandle();
    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("arguments[0].click();", tableRow);
    new WebDriverWait(driver,5).until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> allHandles = driver.getWindowHandles();
    for(String winHandle:allHandles)
    {
        if (!first_handle.equalsIgnoreCase(winHandle)
        {
            driver.switchTo().window(winHandle);
        }
    }
    
    0 讨论(0)
  • 2020-11-27 09:08

    Maybe you just have to wait until a second window is created? Maybe selenium checks window handles too fast?

    Try with WebDriverWait

    Example:

    String currentHandle = driver.getWindowHandle();
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.numberOfWindowsToBe(2));
    
    Set<String> allHandles = driver.getWindowHandles();
    for (String handle : allHandles) {
        if (!handle.equals(currentHandle)) driver.switchTo().window(handle);
    }
    

    If a number of windows will be less or more than 2, TimeoutException will occur.

    0 讨论(0)
  • 2020-11-27 09:14
     **Try this code:**
    
       public static void switchToNewWindow(WebDriver driver, WebElement 
       causeOfNewWindow) {
    
        // Get Handles before opening new window
        Set<String> oldHandles = driver.getWindowHandles();
    
        // Click element to open new Window
        causeOfNewWindow.click();
    
        // Get Handles after opening new window
        Set<String> newHandles = driver.getWindowHandles();
    
        for (String handle : newHandles) {
    
            if (!oldHandles.contains(handle)) {
                driver.switchTo().window(handle);
            }
    
        }
    }
    
    0 讨论(0)
提交回复
热议问题