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
Using the original post code.
string existingWindowHandle = driver.CurrentWindowHandle;
Its the first window.
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}
Related videos on Youtube
Author by
user1487331
Updated on July 09, 2022Comments
-
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 theboolean a
is true.How can I resolve this?
-
VolkerK almost 12 yearsWhat happens if you just break, without switchTo() a 2nd time, since you already have switched when assigning the boolean.
-
-
Nick Kahn over 11 yearshow do you get the
existingWindowHandle
? -
Ranadheer Reddy about 9 yearsexistingWindowHandle = driver.CurrentWindowHandle;
-
BradleyDotNET over 8 yearsCode-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 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 almost 8 yearsCode-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.