如何断言selenium python web驱动程序中存在的图像?

时间:2014-07-02 12:46:15

标签: python image selenium webdriver assert

我想断言图片出现在页面上。 我正在使用python的selenium web驱动程序。 我还想在未加载图像时打印一条消息。 任何人都可以帮我写一个剧本吗?

这是一段在网站上显示图片的HTML代码: [img src ='photo.jpg'class ='image class']

3 个答案:

答案 0 :(得分:2)

我无法帮助python,但可以为那些希望在Java中做类似事情的人提供一般性建议和Java代码。我的方法是

  1. 获取图片的src属性并快速HTTP GET 致电并确保获得200 OK回复。
  2. 一旦完成,你     可以使用检查WebElement的naturalWidth属性     的JavaScript。如果它超过0,它呈现的很好。不过这个     在IE中工作方式不同。 IE具有.complete属性。这将是     如果渲染图像,则为true(参考here
  3. 以下是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();
       }
    }
    

答案 1 :(得分:0)

可能有更好的方法,但我决定检索所有图像标签。

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))

答案 2 :(得分:0)

省略了驱动程序设置,但是一旦你添加了它就应该可以工作。部分归功于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)