Я только начинаю работать с WatiN и пытаюсь протестировать большое количество страниц с аутентификацией. Я использовал только создание нового экземпляра IE каждый раз, когда требуются новые данные для входа. После аутентификации фреймворк должен перейти на 2 страницы сайта и щелкнуть ссылку на каждой из них, чтобы загрузить файл (повторяется несколько раз в течение одного сеанса аутентификации для разных клиентов).
Навигация по страницам в порядке, и загрузка работает с IE9, используя комбинацию WatiN и SendKeys (). Однако, когда он переходит на вторую страницу и пытается найти объект Link по тексту (который имеет тот же текст, что и на предыдущей странице), он возвращает URL-адрес загрузки с первой страницы. Это означает, что, по сути, на какую бы страницу я ни направлял WatiN, она, похоже, сохраняет объект Link с первой страницы.
Первый метод создает мой объект браузера и возвращает его в родительский класс:
public IE CreateBrowser(string email, string password, string loginUrl)
{
Settings.MakeNewIe8InstanceNoMerge = true;
Settings.AutoCloseDialogs = true;
IE ie = new IE(loginUrl);
ie.TextField(Find.ById("Email")).TypeText(email);
ie.TextField(Find.ById("Password")).TypeText(password);
ie.Button(Find.ById("btnLogin")).Click();
Thread.Sleep(1500);
return ie;
}
Затем я перебираю логины, передавая URL для каждой необходимой страницы следующему:
public void DownloadFile(IE ie, string url)
{
//ie.NativeBrowser.NavigateTo(new Uri(url));
ie.GoTo(url);
Thread.Sleep(1000);
//TODO: Why is link holding on to old object?
Link lnk = null;
lnk = ie.Link(Find.ByText("Download file"));
lnk.WaitUntilExists();
lnk.Focus();
lnk.Click();
//Pause to allow IE file dialog box to show
Thread.Sleep(2000);
//Alt + S to save
SendKeys.SendWait("%(S)");
}
Вызывающий метод связывает все это вместе вот так (я запутал некоторые детали):
for (int i = 0; i < loginCount; i++)
{
using (IE ie = HelperClass.CreateBrowser(lLogins[i].Email, lLogins[i].Password, ConfigurationManager.AppSettings["loginUrl"]))
{
...Gets list of clients we're wanting to check
for (int j = 0; j < clientCount; j++)
{
string url = "";
switch ()
{
case "Page1":
string startDate = "20110831";
string endDate = "20110901";
url = String.Format(page1BaseUrl, HttpUtility.UrlEncode(lClients[j].Name), startDate, endDate);
break;
case "Page2":
url = String.Format(page2BaseUrl, HttpUtility.UrlEncode(lClients[j].Name));
break;
}
HelperClass.DownloadFile(ie, url);
}
}
}
Кто-нибудь знает, что может быть причиной этого или как обойти это? Нужно ли создавать новый объект IE для каждого запроса?