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. Теперь приложение продолжит работу после открытия браузера.