WatiN - В ожидании печенья - PullRequest
0 голосов
/ 27 февраля 2011

Мне было поручено создать «своего рода» веб-рептилию.Задача состоит в том, чтобы зайти на определенные веб-сайты, ввести часть данных и затем отправить эти данные, чтобы получить результат.

Я обнаружил, что WatiN является отличным инструментом для получения этих данных, поскольку он является открытым исходным кодом и имеет всемне нужна функциональность - даже если это неправильное использование API-интерфейса тестирования (это неправильно?).

В любом случае - реальный вопрос в том, является ли

Browser.WaitForComplete();

Не ждет загрузки ВСЕГО.Кажется, он просто ждет последнего тега body и затем возвращается.Однако я считаю, что файл cookie не создается после завершения загрузки страницы, поскольку он генерируется серверной частью ASP.NET - он загружается после интерактивного объекта, который выглядит как AJAX или что-то в этом роде.

Я не являюсь владельцем или владельцем веб-сайта, поэтому могу собирать информацию только на основе того, что вижу из браузера и других инструментов, имеющихся в моем распоряжении.

Есть ли способ заставить WatiN ждать обновления файла cookie?

Спасибо заранее.

Джон.

Редактировать:

В качестве примера того, что я делаю, чтобы исправить проблему в минуту (Что немного неортодоксально, но это исправляет на минуту).

Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();
Browser.WaitForComplete();

var cookie = Browser.Eval("document.cookie");

Теперь вы можете понять, почему я хочу найти реальное решение.

Спасибо

1 Ответ

1 голос
/ 27 февраля 2011

Я не уверен, что смог бы зафиксировать событие для этого, так как я подозреваю, что на странице должен быть запущен javascript, который в конечном итоге обновляет cookie.

Если вы можете сказать разницу между "старым" и«обновленный» cookie, вы можете попробовать что-то вроде этого:

// Maximum number of loops, to avoid infinite loops
int maxLoops = 10;

// Wait for the page to complete
Browser.WaitForComplete();

// Grab a copy of the current cookie
var cookie = Browser.Eval("document.cookie");

// HACK: Dirty hack to wait for cookie to be updated
while (CookieIsNotUpdated(cookie) && i++ <= maxLoops)
{
    Browser.WaitForComplete(); // (Or other wait/sleep)
    cookie = Browser.Eval("document.cookie");
}

Это не очень хороший способ сделать это, но он должен работать при отсутствии чего-то лучшего.

...