Получить заголовок окна, не фокусируя его в Capybara / Selenium - PullRequest
3 голосов
/ 12 января 2012

У меня есть приложение, в котором пользователь может просматривать 2 возможных окна / вкладки браузера.

Если пользователь находится в окне 2, а в окне 1 происходит событие, я изменяю текст строки заголовка.используя JQuery Title Alert (https://github.com/heyman/jquery-titlealert) как способ уведомления о том, что что-то происходит в Window 1. Изменение текста заголовка будет мигать, пока не будет сфокусировано Window 1.

Все это работает нормально. Однако я хочучтобы протестировать интеграцию, используя капибару и селен, и я столкнулся с интересной проблемой. Хотя я могу легко переключаться между окнами, используя что-то вроде:

      page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)

Я хочу иметь возможность получить текст не сфокусированное окно, чтобы проверить, что текст изменился. Кто-нибудь знает, как:

  1. Получить заголовки всех окон?
  2. проверять свойства окна без переключенияк нему / фокусируясь на этом?
  3. каким-либо другим способом я мог бы подойти к этой проблеме?

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 09 февраля 2012

Вы можете использовать WebDriverBackedSelenium, который имеет GetAllWindowTitles(). Он должен работать в Ruby с последней версией 2.19. Следующий пример в C # работает.

IWebDriver driver = new FirefoxDriver();
ISelenium browser = new WebDriverBackedSelenium(driver, driver.Url);
browser.Start();

// open a test page and some popup windows
browser.Open(@"Test.html"); // open the main page which has title 'My Main Window'
browser.Click("btnPop1"); // open a popup window with title 'My Popup 1'
browser.Click("btnPop2"); // open a popup window with title 'My Popup 2'

string[] titles = browser.GetAllWindowTitles();
foreach (string title in titles)
{
    Console.WriteLine(title);
}
browser.Close();
Console.ReadLine();

Выходная информация соответствует ожидаемой:

My Main Window
My Popup 1
My Popup 2
...