Элемент "webBrowser".Как ждать загрузки страницы? - PullRequest
0 голосов
/ 23 декабря 2018

Структура документа
"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();
            }

1 Ответ

0 голосов
/ 24 декабря 2018

Попробуйте это:

bool statusAuthorization;

private void Frm5UC_Load(object sender, EventArgs e)
{
        webBrowser1.Visible = true;

        statusAuthorization = true; // !!! CHANGES

        // *** ТЕСТ ***

}

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;

    if (statusAuthorization == true && webBrowser1.Document != null)
    { Method_1();
        Authorization();
    }
}

    #region *** TESTS ***


    public void  Method_1()
    {
        textBox2.Text = "_domain_com";
        textBox1.Text = @"domain_com/login/";


    }






    private void button1_Click(object sender, EventArgs e)
    {Method_1();
        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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...