WatiN не может найти текст после поиска в Google

#watin

#watin

Вопрос:

Я пытаюсь запустить простой пример WatiN: выполните поиск в Google, затем проверьте результат поиска. (в IE9)

 var browser = new IE("http://www.google.com/ncr");

browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();

Assert.True(browser.ContainsText("WatiN"));
  

Этот тест не пройден! Я не знаю почему, но добавление вызова WaitUntilContainsText («Все») делает этот проход:

 var browser = new IE("http://www.google.com/ncr");

browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.WaitUntilContainsText("Everything");// because of google instant??
browser.Button(Find.ByName("btnG")).Click();

Assert.True(browser.ContainsText("WatiN"));
  

Я предполагаю, что это, возможно, из-за поведения Google instant, но не могу быть уверен.
Кто-нибудь может объяснить, что не так с этим тестом?

Комментарии:

1. Недавно я запустил этот пример с помощью WatiN и столкнулся с некоторыми проблемами, потому что название кнопки поиска теперь «BtnK» вместо «BtnG»

2. Я только что проверил это. На самом деле это 2 идентификатора для 2 страниц Google: btnK: на домашней странице Google (где в середине экрана есть 1 длинное текстовое поле). На этот раз идентификатор кнопки = ‘gbqfa’. Кстати: на странице результатов Google (где основное текстовое поле находится в верхней части экрана. На этот раз идентификатор кнопки = ‘gbqfb’

Ответ №1:

Да, это связано с Google Instant. Когда вы нажимаете Click() кнопку on, страница не будет перезагружена, поэтому вызов ContainsText произойдет почти без задержки. Вам необходимо использовать некоторые Wait... методы IE элементов or, если вы просматриваете страницы, сгенерированные javascript «на лету» (в основном AJAX).

Комментарии:

1. Спасибо. Кажется, что нет единого способа дождаться завершения вызова ajax. Я видел некоторые решения, которые применяются для .aspx, но не для Google ajax.