タイトなループで 4 つの画像を要求する C# のコンソール アプリは、前の要求を返すことがあります。コードは次のとおりで、どの Web サイトに対しても機能します。通常、実行ごとに 3 つまたは 4 つのエラーが表示されます。私が管理している Web サイトを閲覧している人々から、ユーザーが HTML ページを要求したときに jpeg またはスクリプトが読み込まれることがあるという報告を受けて、このコードを開発しました。
Chrome の問題なのか ChromeDriver の問題なのかわかりません。前のリクエストが HTML ページだった場合、画像の代わりに 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();
}
}
}
}