Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何断言selenium python web驱动程序中存在的图像?_Python_Image_Selenium_Webdriver_Assert - Fatal编程技术网

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

如何断言selenium python web驱动程序中存在的图像?,python,image,selenium,webdriver,assert,Python,Image,Selenium,Webdriver,Assert,我想断言页面上存在图像。 我将SeleniumWeb驱动程序与python一起使用。 我还希望在图像尚未加载时打印一条消息。 有人能帮我写剧本吗 下面是一段在网站上显示图像的html代码: [img src='photo.jpg'class='image class']我无法帮助您使用python,但可以为那些希望在Java中执行类似操作的人提供一般建议和Java代码。我的方法是 获取图像的src属性并快速执行httpget 打电话,确保您得到200 OK响应 一旦完成了,你就可以 可以使用检查

我想断言页面上存在图像。 我将SeleniumWeb驱动程序与python一起使用。 我还希望在图像尚未加载时打印一条消息。 有人能帮我写剧本吗

下面是一段在网站上显示图像的html代码:
[img src='photo.jpg'class='image class']

我无法帮助您使用python,但可以为那些希望在Java中执行类似操作的人提供一般建议和Java代码。我的方法是

  • 获取图像的
    src
    属性并快速执行
    httpget
    打电话,确保您得到
    200 OK
    响应
  • 一旦完成了,你就可以 可以使用检查WebElement的
    naturalWidth
    属性 Javascript。如果其大于0,则渲染为精细。然而这 IE中的工作方式不同。IE具有
    .complete
    属性。会的 如果渲染图像,则为true(参考)
  • 下面是示例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)
    

    xpath选择器,
    img[src='photo.jpg']
    问题被标记为“python”。我知道。我提到我不能在python中提供帮助,但给出了可以在python中实现的一般建议。提供Java代码,以防有人意外来到这里并需要Java解决方案。我只是想帮忙,我明白。这就是我来这里的原因。我也看到了我的答案的要点,但我把它留给了OP,直到OP说它有帮助或没有,或者OP需要更多的帮助。