簡體   English   中英

如何斷言selenium python web驅動程序中存在的圖像?

[英]How to assert image present in selenium python web driver?

我想斷言圖像存在於頁面上。 我正在使用python的selenium web驅動程序。 我還想在未加載圖像時打印一條消息。 任何人都可以幫我一個腳本嗎?

這是一段在網站上顯示圖像的HTML代碼:[img src ='photo.jpg'class ='image class']

我無法幫助python,但可以為那些希望在Java中做類似事情的人提供一般性建議和Java代碼。 我的方法是

  1. 獲取圖像的src屬性並進行快速HTTP GET調用,並確保獲得200 OK響應。
  2. 完成后,您可以使用Javascript檢查WebElement的naturalWidth屬性。 如果它超過0,它呈現的很好。 然而,這在IE中的工作方式不同 IE有.complete屬性。 如果渲染圖像將是真的(參考這里

這是Java代碼示例,

@Test
   public void test()
   {
      WebDriver driver = new FirefoxDriver();
      String url = "http://www.espncricinfo.com/";
      driver.get(url);
      WebElement img = driver.findElement(By.cssSelector("a[title='ESPN Cricinfo']>img"));
      String src = img.getAttribute("src");
      Client client = Client.create();
      WebResource resource = client.resource(src);
      assertThat("Response code is not 200 OK", resource.get(ClientResponse.class).getStatus(), equalTo(200));
      assertThat("Image is not rendered correctly", isImageVisible(driver, img),equalTo(true));
      driver.quit();
   }
   public boolean isImageVisible(WebDriver driver, WebElement image)
   {
      Boolean result = null;
      if (driver instanceof InternetExplorerDriver || ((RemoteWebDriver) driver).getCapabilities().getBrowserName().equals("internet explorer"))
      {
         result = (Boolean) ((JavascriptExecutor) driver).executeScript("return arguments[0].complete;", image);
      }
      else
      { //other browser types use diff method to check
         result = (Boolean) ((JavascriptExecutor) driver).executeScript("return (typeof arguments[0].naturalWidth!=\"undefined\" && arguments[0].naturalWidth>0);", image);
      }
      return result.booleanValue();
   }
}

可能有更好的方法,但我決定檢索所有圖像標簽。

all_images = self.driver.execute_script("return document.getElementsByTagName('img')")
for image in range(0, len(all_images)):
    print self.driver.execute_script("return document.getElementsByTagName('img')[{}].src".format(image))

省略了驅動程序設置,但是一旦你加入了它就應該可以工作。部分歸功於Nilesh,用他的Java示例指出了我正確的方向。

import requests
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By

def setUp(self):
    self.verificationErrors = []


def test_images_for_200_response(self):
    driver.get('http:example.com')
    example_images = driver.find_elements(By.TAG_NAME, 'img')

    for image in example_images:
        current_link = image.get_attribute("src")
        r = requests.get(current_link)
        try: self.assertEqual(r.status_code, 200)
        except AssertionError, e: self.verificationErrors.append(current_link + ' delivered response code of ' + r.status_code)

def tearDown(self):
    driver.quit()
    self.assertEqual([], self.verificationErrors)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM