Selenium webdriver window handles c# switchTo failed

38,959

Solution 1

//switch to new window 
driver.FindElement(By.Id("link")).Click(); 

//wait for new window to open 
Thread.Sleep(2000); 

//get the current window handles 
string popupHandle = string.Empty; 
ReadOnlyCollection<string> windowHandles = driver.WindowHandles;  

foreach (string handle in windowHandles)  
{  
    if (handle != existingWindowHandle)  
    {  
         popupHandle = handle; break;  
    }  
}  

 //switch to new window 
driver.SwitchTo().Window(popupHandle); 

//check for element on new page 
webElement = driver.FindElement(By.Id("four04msg")); 
if(webElement.Text == "THE CONTENT YOU REQUESTED COULDN’T BE FOUND...")  
{  
    return false;  
}  
else  
{  
    return true;  
}  

 //close the new window to navigate to the previous one
driver.close(); 

//switch back to original window 
driver.SwitchTo().Window(existingWindowHandle);

Solution 2

  1. Using the original post code.

    string existingWindowHandle = driver.CurrentWindowHandle;

    Its the first window.

  2. One important thing is:

    ReadOnlyCollection<string> windowHandles = driver.WindowHandles

    Contains the string name object, not the Windows Title Name, for example Collection windowHandles could contains:

    Not Windows Title Name as {Menu},{PopUp}
    It contains: {45e615b3-266f-4ae0-a508-e901f42a36d3},{c6010037-0be6-4842-8d38-7f37c2621e81}

Share:
38,959

Related videos on Youtube

user1487331
Author by

user1487331

Updated on July 09, 2022

Comments

  • user1487331
    user1487331 almost 2 years

    Here comes 2 windows pop out during the testing.

    my code:

    string BaseWindow = driver.CurrentWindowHandle;                 
    ReadOnlyCollection<string> handles = driver.WindowHandles;
    
    foreach(string handle in handles)                    
    {                         
        Boolean a = driver.SwitchTo().Window(handle).Url.Contains("Main");
        if (a == true)  
        {       
            InitialSetting.driver.SwitchTo().Window(handle);      
            break;
        }  
    }                
    

    I want to switch to the window which url contains "Main". But when the test is running, it switches between two windows continuously and it doesn't stop.

    I debug and found the foreach didn't break even when the boolean a is true.

    How can I resolve this?

    • VolkerK
      VolkerK almost 12 years
      What happens if you just break, without switchTo() a 2nd time, since you already have switched when assigning the boolean.
  • Nick Kahn
    Nick Kahn over 11 years
    how do you get the existingWindowHandle ?
  • Ranadheer Reddy
    Ranadheer Reddy about 9 years
    existingWindowHandle = driver.CurrentWindowHandle;
  • BradleyDotNET
    BradleyDotNET over 8 years
    Code-only answers on 3 year old posts help no one. At least provide an explanation (and really, it should be better than the existing ones)
  • Dgan
    Dgan over 8 years
    @Michael Ayers how can i get handle to current window(existing Window which is opened manually) which is not opened by driver means i can't use driver.getWindowHandle();
  • Silent Sojourner
    Silent Sojourner almost 8 years
    Code-only answer works perfectly for me. Code is more eloquent than words to a developer. And this answer is better in that it works in a scenario of multiple pop-ups. The first answer works only for 1 popup.