class Program
{
static void Main(string[] args)
{
ChromeDriver chromeDriver = null;
Console.WriteLine("Hello World!");
List<string> Urls = new List<string>() {
"https://www.google.com",
"https://www.facebook.com",
"https://www.youtube.com",
"https://www.gmail.com",
"https://www.linkedin.com"
};
ChromeOptions chromeOptions = new ChromeOptions()
{
PageLoadStrategy = PageLoadStrategy.Normal
};
//options.AddArgument("headless");
chromeOptions.AddArguments("disable-geolocation", "start-maximized", "disable-infobars");
chromeOptions.AcceptInsecureCertificates = true;
chromeOptions.LeaveBrowserRunning = true;
Parallel.ForEach(Urls, url =>
{
chromeDriver = new ChromeDriver(AppDomain.CurrentDomain.BaseDirectory, chromeOptions, new TimeSpan(0, 0, 60));
chromeDriver.Url = url;
TestClass testClass = new TestClass(chromeDriver);
testClass.test();
});
Console.ReadKey();
}
}
public class TestClass
{
IWebDriver driver;
public TestClass(OpenQA.Selenium.Chrome.ChromeDriver driver)
{
this.driver = driver;
}
public void test()
{
Console.WriteLine(this.driver.Url);
}
}
上面的代码产生了什么:
尽管我想在那里设置所有5个不同的URL。但显示最后执行的网站。我在这里想念什么?
答案 0 :(得分:4)
在第5行上声明ChromeDriver chromeDriver = null;
,将创建一个范围为Main
方法的单个变量。
第28行的chromeDriver = new ChromeDriver(...
调用
创建一个 new 实例,但将其分配给先前在 enclosing 范围(即第5行)中声明的变量。因此,回调中的每个分配都会覆盖所有其他回调执行的分配。
你想做的是
ChromeDriver chromeDriver = null;
chromeDriver = new ChromeDriver
替换为var chromeDriver = new ChromeDriver
,从而创建一个范围为回调而不是Main
方法的实例。