WebDriver в C # (работа с окнами и синхронизация) - PullRequest
2 голосов
/ 03 октября 2011

Я работаю с webDriver в # IE9 и обнаружил одну проблему.Если я запускал тесты в режиме Run, то все тесты не выполнялись, потому что webDriver не существует (т.е. два окна), но если я поставил точку останова в тестах и ​​запустил тесты, то в режиме отладки я прошел все тесты.Пожалуйста, скажите мне, что делать, потому что я не знаю.Это мой код:

private void MyMethods(IWebdriver driver)
{

    foreach (var item in driver.WindowHandles) // if I put breakpoint, I see 2 count Window Handles else this methods don't work.
    {
        if (driver.SwitchTo().Window(item).Title == "PortalSubMenuPopupForm")
        {
            driver.SwitchTo().Window(item);
            break;
        }
    }
}

1 Ответ

0 голосов
/ 11 октября 2011

У Selenium есть «проблема» с IE, когда новые окна могут не появиться в списке WindowHandles сразу.

Решение может быть либо

  • wait a фиксированное количество времени перед вызовом d river.WindowHandles

или

  • используйте WebDriverWait класс для ожидания числаэлементы под WindowHandles для изменения

Я думаю, что второй является более надежным.Вот краткая реализация:

public void LaunchNewWindow(IWebElement element)
{
    int windowsBefore = driver.WindowHandles.Count;
    element.Click();

    TimeSpan timeout = new TimeSpan(0, 0, 10);
    WebDriverWait wait = new WebDriverWait(driver, timeout);

    wait.Until((_driver) =>
    {
        return _driver.WindowHandles.Count != windowsBefore;
        //optionally use _driver.WindowHandles.Count > windowsBefore
    });
}

Теперь вы можете использовать функцию следующим образом:

IWebElement clickMe = //some element that launches a new window

LaunchNewWindow(clickMe);
foreach (var item in driver.WindowHandles)
{
   //etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...