Вопрос по c#, selenium, webdriver, for-loop, window-handles – Окно Selenium Webdriver обрабатывает c # switchTo не удалось

5

При тестировании появляются 2 окна.

мой код:

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;
    }  
}                

Я хочу переключиться на окно, URL-адрес которого содержит "Main". Но когда тест выполняется, он непрерывно переключается между двумя окнами и не останавливается.

Я отладил и нашелforeach не сломался, даже когдаboolean a правда.

Как я могу решить это?

Что произойдет, если вы просто прервитесь, без switchTo () во второй раз, поскольку вы уже переключились при назначении логического значения. VolkerK

Ваш Ответ

3   ответа
3

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}

12
//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);
существующиеWindowHandle = driver.CurrentWindowHandle;
@ Michael Ayers, как я могу получить дескриптор текущего окна (существующего окна, которое открывается вручную), которое не открывается драйвером, означает, что я не могу использовать driver.getWindowHandle ();
как вы получаетеexistingWindowHandle ?
-1
        IWebDriver popup = null;
        string mainWindow = driver.CurrentWindowHandle;
        bool foundPopupTitle = false;
        foreach (string handle in driver.WindowHandles)
        {
            popup = driver.SwitchTo().Window(handle);
            if (popup.Title.Contains(title))
            {
                foundPopupTitle = true;
                break;
            }
        }

        if (foundPopupTitle)
        {
            popup.Close();
        }
        //switch back to original window
        driver.SwitchTo().Window(mainWindow);
Ответ только для кода работает идеально для меня. Код более красноречив, чем слова для разработчика. И этот ответ лучше в том, что он работает в сценарии с несколькими всплывающими окнами. Первый ответ работает только для 1 всплывающего окна.
Ответы только на код на 3-летних постах никому не помогут. По крайней мере, дать объяснение (и действительно, оно должно быть лучше, чем существующие)

Похожие вопросы