Структура документа
"Form0" - Форма
- - "panel2" - Панель
- - - "Frm5UC" - Пользовательский элемент
- - - - "webBrowser1" - Браузер
Логика приложения:
- перейти на страницу в «webBrowser1»;
- ввести логин;
- ввести пароль;
- нажать кнопку «Войти».
Если я выполняю логику с помощью кода (это метод «Method_0 ()»), форма не успевает загрузить метод «Authorization ()».Я получаю «webBrowser1.Document = null», ошибка «Ссылка на объект не указывает на экземпляр объекта».
Если я все делаю через интерфейс, то все работает.
Как заставить логику работать программно?
private void Frm5UC_Load(object sender, EventArgs e)
{
webBrowser1.Visible = true;
// *** TESTS ***
Method_0();
}
#region *** TESTS ***
public void Method_0()
{
Method_1();
// Method_2();
}
public void Method_1()
{
textBox2.Text = "_domain_com";
textBox1.Text = @"domain_com/login/";
button1.PerformClick();
}
public void Method_2() // Авторизация
{
Authorization();
}
#endregion *** TESTS ***
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text);
}
private void button2_Click(object sender, EventArgs e)
{
Authorization();
}
public void Authorization() // Авторизация
{
foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("input"))
{
if (he.GetAttribute("name") == "login[login]")
{
he.SetAttribute("value", "login798");
}
}
// Code "enter password"
// Code "Press the button"
}
Обновление.
Я пытаюсь использовать событие «DocumentCompleted».
Добавлена переменная «bool statusAuthorization;».
Какрезультат: - открывается страница с полями для ввода логина / пароля;и больше ничего не происходит.Код не вводит логин / пароль.
Я пытаюсь сделать отладку.
Пошагово весь код.
Нет ошибок.Все работает, но форма с браузером не открывается.
Если я войду через интерфейс, то все работает.
bool statusAuthorization;
private void Frm5UC_Load(object sender, EventArgs e)
{
webBrowser1.Visible = true;
statusAuthorization = true; // !!! CHANGES
// *** ТЕСТ ***
Method_0();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;
if (statusAuthorization == true)
{
Authorization();
}
}
#region *** TESTS ***
public void Method_0()
{
Method_1();
// Method_2();
}
public void Method_1()
{
textBox2.Text = "_domain_com";
textBox1.Text = @"domain_com/login/";
button1.PerformClick();
}
public void Method_2() // Авторизация
{
Authorization();
}
#endregion *** TESTS ***
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text);
}
private void button2_Click(object sender, EventArgs e)
{
Authorization();
}
public void Authorization() // Авторизация
{
foreach (HtmlElement he in webBrowser1.Document.GetElementsByTagName("input"))
{
if (he.GetAttribute("name") == "login[login]")
{
he.SetAttribute("value", "login798");
}
}
// Code "enter password"
// Code "Press the button"
statusAuthorization = false; // !!! CHANGES
}
Обновление
Результат: форма загружается снова и снова.
private void Frm5UC_Load(object sender, EventArgs e)
{
string s = "stop";
webBrowser1.Visible = true;
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompletedHandler);
// *** ТЕСТ ***
Method_1();
}
private void DocumentCompletedHandler(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//Done!
Authorization();
}