1

私はC#でWebdriverを使用しています。問題は、Webdriver がデザインをテストできないことです。そのため、スクリーンショットの比較のようなものを作成しようとしています。なぜなら、私は大きなサイトで作業していて、毎日新しい先物、新しい変更があるので、そうではありませんどこで、どのブラウザのデザインが壊れていないかを知っています。私の質問は、ツール、フレームワーク、プロジェクト、またはいくつかのアイデアを知っていますか?

私はすでに何かを書いていますが、それほど完璧ではありません.私のコードは、さまざまなブラウザーとバージョンでサイトのスクリーンショットを作成し、その後、それらを切り取ってデモ画面と比較しています. 間違ったピクセルのテストが 5% 以上ある場合は、落ちています。

PS私はジュニアです)

誰かが将来それを必要とする場合の私のコードの一部:

        var screenshot = ((ITakesScreenshot)Global.Driver).GetScreenshot();
        screenshot.SaveAsFile(dirHomePage + "homepage.png", ImageFormat.Png);
        var mainImg = new Bitmap(File.OpenRead(dirHomePage + "homepage.png"));
        var section = new Rectangle(new Point(0, 0), new Size(mainImg.Width, 153));
        this.header = this.CropImage(mainImg, section);
        this.header = this.ClearImage(this.header, Color.White, 264, mainImg.Width, 30, 60);
        ImageComparison(this.header, this.demoHeader);
    public Bitmap ClearImage(Bitmap source, Color color, int fromW, int toW, int fromH, int toH)
    {
        Bitmap bmp = source;
        for (int i = fromW; i < toW; i++)
        {
            for (int j = fromH; j < toH; j++)
            {
                bmp.SetPixel(i, j, color);
            }
        }

        return bmp;
    }

    public Bitmap CropImage(Bitmap source, Rectangle section)
    {
        Bitmap bmp = new Bitmap(section.Width, section.Height);
        Graphics g = Graphics.FromImage(bmp);
        g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);
        return bmp;
    }

    public void ImageComparison(Bitmap firstImg, Bitmap secondImg)
    {
        bool match = false;
        int nrBadPixels = 0;
        if (firstImg.Width.Equals(secondImg.Width) && firstImg.Height.Equals(secondImg.Height))
        {
            double acceptedProcent = (firstImg.Width * firstImg.Height) * 0.05;
            for (int i = 0; i < firstImg.Width; i++)
            {
                for (int j = 0; j < firstImg.Height; j++)
                {
                    string firstImgRef = firstImg.GetPixel(i, j).ToString();
                    string secondImgRef = secondImg.GetPixel(i, j).ToString();
                    if (firstImgRef != secondImgRef)
                    {
                        nrBadPixels++;
                        if (nrBadPixels > acceptedProcent)
                        {
                            match = false;
                            break;
                        }
                        match = true;
                    }
                }
            }
        }

        Assert.IsTrue(match);
    }
4

2 に答える 2

1

Sikuliをお試しいただけると思います。

Sikuli Script は、画面に表示されるものすべてを自動化します。画像認識を使用して、GUI コンポーネントを識別および制御します。GUI の内部コードやソース コードに簡単にアクセスできない場合に便利です。

ただし、これはレイアウトなどのためだけのものです。DOM に基づいて機能をテストする必要がある場合は、Selenium WebDriver が最適な方法です。さらに、Selenium WebDriver C# というよりも、Selenium IDE に似ています。この wiki ページSikuliWebDriverが興味深いかもしれません。

于 2013-05-16T08:12:54.987 に答える