私はSeleniumを使って自動テストについて学びたいと思っています。私は一人で働いているので、ドキュメント、Google、そしてあなたたちだけがいます。Seleniumと同じスクリーンショットを撮った後、ハッシュファイルが異なる
VS-2105でSeleniumを使用して、自分のウェブサイトのスクリーンショットをイメージとしてファイル位置に保存し、その時点でデバッグを停止します。このファイルは「期待される」結果になります。
私はその行をコメントアウトし、スクリーンショットを撮って別の場所に保存し直して再度実行します。同じサイズのファイルでもハッシュ値が異なります。
私の目には同じです。
私のアプローチに何か問題はありますか?
これは私が私の 'マスター'
_webDriver.Navigate().GoToUrl(url);
var accept = _webDriver.SwitchTo().Alert();
accept.Accept();
IWebElement menu = _webDriver.FindElement(By.Id("link"));
menu.Click();
System.Threading.Thread.Sleep(500);
var screenshot = _webDriver.GetScreenshot();
var fileName = "expandMenuInPlan.png";
var origFile = _testImagesPersistentPath + fileName;
screenshot.SaveAsFile(origFile, OpenQA.Selenium.ScreenshotImageFormat.Png);
を作成するために実行し、これは私が
_webDriver.Navigate().GoToUrl(url);
var accept = _webDriver.SwitchTo().Alert();
accept.Accept();
IWebElement menu = _webDriver.FindElement(By.Id("link"));
menu.Click();
System.Threading.Thread.Sleep(500);
var screenshot = _webDriver.GetScreenshot();
var fileName = "expandMenuInPlan.png";
var origFile = _testImagesPersistentPath + fileName;
//screenshot.SaveAsFile(origFile, OpenQA.Selenium.ScreenshotImageFormat.Png); COMMENTED OUT
//The above is identical
var newFile = _testImagesTempForTestRunPath + fileName;
screenshot.SaveAsFile(newFile, OpenQA.Selenium.ScreenshotImageFormat.Png);
string hashOrig = GetBytes(origFile);
string hashNew = GetBytes(newFile);
if (hashOrig != hashNew)
{
SaveFailedImage(origFile, newFile, fileName);
}
そしてGetBytesメソッド
private string GetBytes(string file)
{
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
var img = new Bitmap(file);
ImageConverter converter = new ImageConverter();
var bytes = (byte[])converter.ConvertTo(img, typeof(byte[]));
return Convert.ToBase64String(sha1.ComputeHash(bytes));
}
}
を比較するために使用するコードですコードです
この方法でスクリーンショットを使用しているのは、信頼できないか、コードに問題がありますか?
私は、スクリーンショットが他のすべてのピクセルに一致するとは考えていません。正確な一致が得られないため、画像の比較は分散のしきい値を使用して行われます。 – Crowcoder