我最近喜欢使用任务而不是创建线程并加入它。它解决了一些问题,同时运行多个单线程方法。以下是方法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,但速度太慢了。这也是代码的简化版。)