Как запустить цикл для селен без замораживания формы в C # - PullRequest
0 голосов
/ 08 октября 2018

Добрый день, друзья, извините, мой английский Я использую переводчик, я бразилец, и на моей платформе не так много активных пользователей, как здесь.

Я разработал программное обеспечение для автоматизации сообщений WhatsApp с использованием селена и С#, в основном программа отправляет сообщение (текстовое поле) на каждый номер (просмотр списка), используя цикл for.

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

Я прочитал все о задачах, прочь, потоках, асинхронности, но я не могу применить к своему коду,

вот код кнопки, который я хочувыполнить без сбоев формы.

 private void button1_Click_1(object sender, EventArgs e)
    {
        int contaErro;
        contaErro = 0;
        int contaAcerto;
        contaAcerto = 0;
        if (textBox4.Text != "") // verifica se tem foto/video selecionada
        {
            if (listView1.Items.Count > 0) // verifica se tem NUMERO NA LISTA
            {
                if (textBox3.Text != "") // verifica se tem mensagem escrita
                {
                    if (driver.FindElements(By.XPath("//input[@class='jN-F5 copyable-text selectable-text']")).Count() != 0) // verifica se ja logou no whatsapp
                    {
                        for (int i = 0; i < listView1.Items.Count; i++)
                        {
                            IWebElement inptPesquisa = driver.FindElement(By.XPath("//input[@class='jN-F5 copyable-text selectable-text']")); // caixa de pesquisa
                            inptPesquisa.Click();
                            inptPesquisa.Clear();
                            inptPesquisa.SendKeys(listView1.Items[i].Text);
                            System.Threading.Thread.Sleep(1000); // tempo para carregar contato


                            if (driver.FindElements(By.XPath("//div[@class='_2wP_Y']")).Count() != 0) // verifica se o numero esta na lista
                            {
                                IWebElement selContato = driver.FindElement(By.XPath("//div[@class='_2wP_Y']")); // se tiver seleciona
                                selContato.Click();
                            }
                            else
                            {

                                contaErro += 1; // se nao conta na lista de erros
                                label4.Text = Convert.ToString(contaErro);
                                label4.Update();
                                continue; // pula para o proximo numero
                            }
                            label8.Text = Convert.ToString(listView1.Items[i].Text); // lê numero atual antes de enviar msg
                            label8.Update(); // informa o numero para a label

                            System.Threading.Thread.Sleep(200);
                            IWebElement inptAnexo = driver.FindElement(By.XPath("//div[contains(@role, 'button') and contains(@title, 'Anexar')]"));
                            inptAnexo.Click();
                            System.Threading.Thread.Sleep(200);

                            IWebElement inpFile = driver.FindElement(By.XPath("//input[@type='file']"));    // carrega a imagem                
                            inpFile.SendKeys(textBox4.Text);

                            System.Threading.Thread.Sleep(1000);
                            IWebElement cxTxt = driver.FindElement(By.XPath("//div[@class='_2S1VP copyable-text selectable-text']"));    // carrega a imagem                
                            cxTxt.Click();
                            cxTxt.Clear();
                            cxTxt.SendKeys(textBox3.Text);

                            System.Threading.Thread.Sleep(200);
                            IWebElement btnEnv = driver.FindElement(By.XPath("//div[contains(@role, 'button') and contains(@class, '_3hV1n yavlE')]"));
                            btnEnv.Click();

                            contaAcerto += 1; // se tudo deu ok conta acerto
                            label6.Text = Convert.ToString(contaAcerto); // escreve na label
                            label6.Update(); // atualiza ela

                            System.Threading.Thread.Sleep(Int32.Parse(textBox1.Text)); // delay entre mensagens


                        }
                    }


                    else
                    {
                        MessageBox.Show("FAÇA LOGIN NO WHATSAPP WEB", "CARREGUE O QRCODE",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("ESCREVA UMA MENSAGEM", "Erro",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("ADICIONE UM NUMERO A LISTA", "Erro",
                       MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        else
        {
            MessageBox.Show("ADICIONE UMA FOTO/VIDEO", "Erro",
                       MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

Я знаю, что есть много вопросов на эту тему, но я не могу использовать их ответы в моем случае

...