Ilyas Zahir Ответов: 0

Backgroundworker и selenium C#


Эй я использую selenium и backgroundworker но когда я запускаю свою программу и нажимаю start я не могу нажать кнопку cancel или stop у меня нет доступа к форме до тех пор пока прогресс не закончится вот мой простой код в котором я тестирую
<pre>using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;


namespace BgWorker
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void startBtn_Click(object sender, EventArgs e)
        {
            //START BG WORKER
            backgroundWorker1.RunWorkerAsync();
            var dr = new ChromeDriver();
            dr.Navigate().GoToUrl("http://google.com");


        }

        private void cancelBtn_Click(object sender, EventArgs e)
        {
            //REQUEST CANCELLATION
            backgroundWorker1.CancelAsync();
        }

      
        //RUN BG STUFF HERE.NO GUI HERE PLEASE
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i <= 100; i++)
            {
                //CHECK FOR CANCELLATION FIRST
                if (backgroundWorker1.CancellationPending)
                {
                    //CANCEL
                    e.Cancel = true;
                }
                else
                {
                    simulateHeavyJob();
                    backgroundWorker1.ReportProgress(i);
                }
            }

        }

        //THIS UPDATES GUI.OUR PROGRESSBAR
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            percentageLabel.Text = e.ProgressPercentage.ToString() + " %";
        }

        //WHEN JOB IS DONE THIS IS CALLED.
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                display("You have Cancelled");
                progressBar1.Value = 0;
                percentageLabel.Text = "0";
            }
            else
            {
                display("Work completed successfully");
            }
        }
        //SIMULATE HEAVY JOB
        private void simulateHeavyJob()
        {
            //SUSPEND THREAD FOR 100 MS
            Thread.Sleep(100);
        }
        //DISPLAY MSG BOX
        private void display(String text)
        {
            MessageBox.Show(text);
        }
        

       
       
    }
}


Что я уже пробовал:

используя backgroundworker, а селен с#

Ravi Bhavnani

Пожалуйста, покажите вам конструкцию и настройку фонового рабочего.

/ Рави

Ilyas Zahir

прости, я не понял.

Ravi Bhavnani

Вы установили для свойств workerreportsprogress и WorkerSupportsCancellation значение true?

/ Рави

Ilyas Zahir

да я так и сделал

Ravi Bhavnani

Помимо неправильного условия цикла (должно быть i < 100, а не i <= 100), ваш код кажется мне нормальным. Можете ли вы отменить фоновый рабочий процесс, если закомментируете драйвер Chrome?

/ Рави

Ilyas Zahir

да я могу отменить фоновый рабочий процесс без использования драйвера chrome

Ravi Bhavnani

Отображает ли драйвер Chrome модальное окно, которое мешает вам получить доступ к вашей форме? Согласно этой теме, вы не можете использовать драйвер Selenium Chrome для тестирования приложения WinForms.

https://www.quora.com/How-do-I-use-Selenium-Webdriver-inside-Windows-Forms-application

/ Рави

Ilyas Zahir

когда я нажимаю кнопку Пуск, он открывает браузер chrome и открывает url... если я хочу перейти к форме и нажать кнопку Отмена, я не могу получить доступ к форме до тех пор, пока действие, данное кнопке Пуск, не будет завершено

Ravi Bhavnani

Можете ли вы попробовать спать поток в течение более длительного времени (например, 1 секунда вместо 100 мсек)?

/ Рави

Ilyas Zahir

это не сработает, потому что действие в кнопке "Пуск" вот так (делай то-то и то-то)
в то время как я нажимаю start действие запускается и когда действие начинается я не могу получить доступ к форме нажать кнопку its like весь элемент управления переходит к webdriver и я могу управлять формой после завершения webdriver

Ravi Bhavnani

Да, именно так я и думал. Смотрите мой ответ 2 комментария вверх.

/ Рави

Ilyas Zahir

так знаете ли вы какое-нибудь решение для этого ?

Ravi Bhavnani

Из того, что говорит поток Quora, вы не можете сделать то, что пытаетесь сделать.

/ Рави

Ilyas Zahir

но я работал с программным обеспечением делай то что я пытаюсь сделать

polaije

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

polaije

Привет еще раз,
Я нашел решение, для первого проекта, который работал, у меня есть ссылка на webdriver, отличный от нового проекта с webdriver, установленным с nuget. Теперь приложение продолжит работу после открытия браузера.

0 Ответов