11

こんにちは、私はセレン webdriver 2.25.0 を使用しています & いくつかの深刻な問題に直面しています。

  1. Selenium Webdriver を使用してページ内の壊れた画像を見つける方法
  2. 画像を見つける方法は、webdriver を使用して同じ名前の別の画像に置き換えられます (これもバグです)。

貴重な提案をお寄せいただきありがとうございます。

4

3 に答える 3

14

受け入れられた回答では、各画像への追加の呼び出しでプロキシを使用して、画像が壊れているかどうかを判断する必要があります。

幸いなことに、JavaScript のみを使用してこれを行う別の方法があります (私は Ruby を使用していますがexecuteScript、WebDriver バインディング全体の任意のメソッドで同じコードを使用できます)。

images = @driver.find_elements(:tag_name => "img")
broken_images = images.reject do |image|
  @driver.execute_script("return arguments[0].complete && typeof arguments[0].naturalWidth != \"undefined\" && arguments[0].naturalWidth > 0", image)
end
# broken_images now has an array of any images on the page with broken links
# and we want to ensure that it doesn't have any items
assert broken_images.empty?

他の質問については、ページのスクリーンショットを撮り、結果のスクリーンショットに正しい画像が含まれていることを人間が手動で確認することをお勧めします。コンピューターは自動化作業を行うことができますが、人間はその結果を時々チェックして検証する必要があります:)

于 2013-05-29T12:03:53.320 に答える
2

他の回答に基づいて、角度/分度器/ webdriverjs 設定で最終的に機能したコードは次のとおりです。

it('should find all images', function () {
    var allImgElts = element.all(by.tagName('img'));

    browser.executeAsyncScript(function (callback) {
        var imgs = document.getElementsByTagName('img'),
            loaded = 0;
        for (var i = 0; i < imgs.length; i++) {
            if (imgs[i].naturalWidth > 0) {
                loaded = loaded + 1;
            };
        };
        callback(loaded);
     }).then(function (loadedImagesCount) {
        expect(loadedImagesCount).toBe(allImgElts.count());
    });
});

webdriver コードは img 要素の数をカウントし、ブラウザー コンテキスト内で実行される関数は、正常に読み込まれた要素の数をカウントします。これらの数値は同じである必要があります。

于 2014-12-04T23:33:27.010 に答える