C#中的一个控制台应用程序在紧密循环中请求四个图像,有时会返回先前的请求。代码如下,适用于任何网站,我通常会在每次运行中看到3或4个错误。我在浏览网站的人员的报告后开发了此代码,我管理用户请求HTML页面时偶尔会加载jpeg或脚本的位置。Selenium和ChromeDriver偶尔为GET请求返回错误的内容
我不知道它是Chrome还是ChromeDriver问题。如果以前的请求是一个HTML页面,那么您可以最终获取该图像而不是图像。似乎是一种竞争条件。
有没有其他人看到过这种行为,他们可以重复下面的代码吗?
class ContentVerify
{
OpenQA.Selenium.IWebDriver driver;
readonly System.Collections.Generic.List<string> testUrls = new System.Collections.Generic.List<string>()
{
"http://i.imgur.com/zNJvS.jpg",
"http://i.imgur.com/lzVec.jpg",
"http://i.imgur.com/rDuhT.jpg",
"http://i.imgur.com/sZ26q.jpg"
};
public void Check()
{
driver = new OpenQA.Selenium.Chrome.ChromeDriver(); // Both InternetExplorerDriver and FirefoxDriver work OK.
for (int i = 0; i < 10; i++)
{
TestUrls();
}
driver.Quit(); // The driver also crashes on exit, but this seems to be a known bug in Selenium.
}
private void TestUrls()
{
foreach (var item in testUrls)
{
System.Console.WriteLine(item);
//System.Threading.Thread.Sleep(1); // Uncommenting this makes Chrome & ChromeDriver work as expected.
driver.Url = item;
// Requests for images come back as an HTML image tag wrapped in a brief HTML page, like below;
//<html><body style="margin: 0px;"><img style="-webkit-user-select: none" src="http://i.imgur.com/zNJvS.jpg"></body></html>
// So the image should always be in the page, but sometimes (not always) we get the previous image requested.
if (!driver.PageSource.Contains(item))
{
System.Console.ForegroundColor = System.ConsoleColor.Red;
System.Console.WriteLine("Expected: {0}, got: {1}", item, driver.PageSource);
System.Console.ResetColor();
}
}
}
}
是的,它可能是。我希望ChromeDriver的工作方式与Firefox和IE一样,但他们不需要这样的延迟,它们会阻塞,直到内容加载完毕。 – 2012-07-17 13:48:30
将延迟添加到其他驱动程序实际上不应该伤害处理,只是可能会花费更长的时间。如果它是隐含的等待而不是显式的(例如,等到元素存在而不是等待30秒),那么它可能根本不会增加处理时间。 – 2012-07-17 15:28:22
但我想找到它的原因,是ChromeDriver还是Chrome的错误?我想知道的原因是,在Chrome浏览活网站时,偶尔发出的GET请求不见了,这个测试案例似乎重现了这一点。 – 2012-07-17 16:28:36