C# - 在任务中复制/粘贴问题

时间:2017-05-22 23:51:33

标签: c# html-agility-pack selenium-chromedriver

我最近喜欢使用任务而不是创建线程并加入它。它解决了一些问题,同时运行多个单线程方法。以下是方法1(我的旧版本)&方法2(测试当前版本)。

(见下文)

方法1:

if (comboBox1.SelectedItem.ToString() == "123" && comboBox2.SelectedItem.ToString() == "XYZ")
{
    Thread dgnsi = new Thread(DG_NSI);          // Kick off a new thread
    dgnsi.SetApartmentState(ApartmentState.STA);
    dgnsi.IsBackground = false;
    b_run.Enabled = true;
    dgnsi.Start();
}

方法2:

if (comboBox1.SelectedItem.ToString() == "123" && comboBox2.SelectedItem.ToString() == "XYZ")
{
    Task dgnsi = Task.Factory.StartNew(() =>
    {
        DG_NSI();
    });
}

线程开始:

[STAThread]
private void DG_NSI()
{
    var timespan = TimeSpan.FromMinutes(4);
    var driverService = ChromeDriverService.CreateDefaultService();
    driverService.HideCommandPromptWindow = true;
    using (IWebDriver driver = new ChromeDriver(driverService, new ChromeOptions()))
    {
        driver.Manage().Timeouts().SetPageLoadTimeout(timespan);
        string _pa = tb_payagreement.Text;
        string _noa = noa;
        string _si = si;

        //Add Pay Agreement
        IWebElement pa_I = driver.FindElement(By.XPath("/html/body/form/table[2]/tbody/tr/td/table/tbody/tr[@id='tab'][2]/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td/table[@class='Ntexteleftalignnowrapnoborder']/tbody/tr[2]/td[1]/textarea[@class='textarea']"));
        pa_I.Click();
        Clipboard.Clear();  // Always clear the clipboard first
        Clipboard.SetText(_pa);
        SendKeys.SendWait("^v");

        //Add Nature of activity
        IWebElement noa_I = driver.FindElement(By.Name("woNOA"));
        noa_I.Click();
        Clipboard.Clear();  // Always clear the clipboard first
        Clipboard.SetText(_noa);
        SendKeys.SendWait("^v");

        //Add Special Instructions
        IWebElement si_I = driver.FindElement(By.Name("woSI"));
        si_I.Click();
        Clipboard.Clear();  // Always clear the clipboard first
        Clipboard.SetText(_si);
        SendKeys.SendWait("^v");

        //Close Application
        driver.Quit();
    }
} //Complete

为了解释我想要实现的目标,我试图通过点击Winforms按钮,使用selenium为自己自动执行任务。目前我有多个线程设置与上面相同。来自方法1的一个问题 - >方法2是一切都工作正常,直到从字符串复制/粘贴信息并粘贴它。它根本不会粘贴任何内容并完成任务。任何人都有关于如何在任务或替代方案中粘贴信息的任何见解?

(注意:我已经尝试过sendkeys,但速度太慢了。这也是代码的简化版。)

0 个答案:

没有答案