Selenium webdriver 检查图像文件是否存在,Robot框架,Selenium2库

Selenium webdriver 检查图像文件是否存在,Robot框架,Selenium2库,selenium-webdriver,robotframework,Selenium Webdriver,Robotframework,我想知道,如果可能的话,以及如何检查,应该显示图片的元素是否真的显示了图片 图片位于同一领域。你的目标并不完全清楚。我认为可以安全地假设,如果您的代码做的一切都正确(即:URL是正确的,css规则不会导致元素被隐藏),那么浏览器将执行它应该执行的操作并显示图像。当然,如果你在测试团队中,实际上是在测试浏览器本身,那是另一个问题 因此,假设浏览器运行正常,以下是几点建议: 可以使用该属性验证元素是否在DOM中 您可以使用关键字获取src属性的值,然后使用的关键字验证url是否返回200状态代码 您

我想知道,如果可能的话,以及如何检查,应该显示图片的元素是否真的显示了图片


图片位于同一领域。

你的目标并不完全清楚。我认为可以安全地假设,如果您的代码做的一切都正确(即:URL是正确的,css规则不会导致元素被隐藏),那么浏览器将执行它应该执行的操作并显示图像。当然,如果你在测试团队中,实际上是在测试浏览器本身,那是另一个问题

因此,假设浏览器运行正常,以下是几点建议:

  • 可以使用该属性验证元素是否在DOM中

  • 您可以使用关键字获取
    src
    属性的值,然后使用的关键字验证url是否返回200状态代码

  • 您可以使用关键字来验证css规则是否允许显示元素

  • 下面是一个完整的工作示例:

    *** Settings ***
    | Library | Selenium2Library
    | Library | RequestsLibrary
    
    *** Variables ***
    | ${TEST_PAGE} | http://the-internet.herokuapp.com/hovers
    | ${BROWSER}   | chrome
    
    *** Keywords ***
    | Assert an image is visible
    | | [Arguments] | ${element id}
    | | [Documentation]
    | | ... | This keyword fails if the given image element is not visible.
    | | ... | Three checks are performed: that the element is on the page,
    | | ... | that selenium thinks the element is visible, and that the 
    | | ... | src attribute of the image points to a resource that is 
    | | ... | accessible. 
    | | 
    | | # Step 1: verify the page contains the given element
    | | Page should contain image | ${element id}
    | | 
    | | # Step 2: verify that the element is visible
    | | Element should be visible | ${element id}
    | | 
    | | # Step 3: verify the src attribute of the image is accessible
    | | ${img src}= | Get element attribute | ${element id}@src
    | | Create session | img-src | ${img src}
    | | ${response} | Get | img-src | / | # URL is relative to the session URL
    | | Should be equal as integers | ${response.status_code} | 200
    | | ... | image url '${img src}' returned unexpected status code '${response.status_code}'
    | | ... | show_values=False
    
    *** Test Cases ***
    | Example of test to verify an image is visible
    | | [Documentation]
    | | ... | Verify that the first image on the test page is visible
    | | 
    | | [Setup] | Open browser | ${TEST_PAGE} | ${BROWSER}
    | | Assert an image is visible | //div[@class='figure']/img
    | | [Teardown] | Close All Browsers
    

    据我所知,没有一个机器人框架库可以测试图像是否实际显示。有几种选择:

  • 研究Sikuli与机器人框架的集成。有一些指南将指导您逐步完成集成。一旦你让Sikuli使用Robot Framework,拍摄一张你的图像截图,并将其与基础截图进行比较。我认为这是你最好的选择

  • 还有其他工具可以进行视觉图像比较。例如,它是用Python编写的,所以如果您有一些Python技能,您可以围绕针功能编写一个库


  • 除了元素可见方面之外,您还可以通过javascript检查图像元素是否由浏览器实际呈现,而不是显示一些缺失的图像图标。您可以使用Selenium2Library执行javascript,也可以将Selenium2Library javascript关键字调用包装到自定义关键字中,使其更具可读性


    我知道这个线程有点旧,但我刚刚找到了另一种不用请求库的方法:

    *** Variables ***
    ${avatar} | css: span.avatar_circle > img
    
    *** Test Cases ***
    Check Avatar From WordPress
    | [Documentation] | Check if the user image is ok
    | [Tags] | avatar | noncritical    
    | Click Element | ${avatar}
    | Wait Until Page Contains  | Latest Blog
    | Page Should Contain Image | ${avatar}
    | Element Should Be Visible | ${avatar}
    | ${src}= | Get Element Attribute | ${avatar} | src
    | Go To | ${src}
    | Wait Until Element Is Visible | css: img
    | Go Back
    

    这不可能通过纯硒实现。您实际上是在进行链接检查。看看这个和这个,了解一些想法。这太棒了!然而,
    ${variable.something}
    究竟是如何工作的?还有,为什么在代码中使用
    |
    ,而我只使用空格?这不是我第一次看到这种情况。@Qwerty:我使用管道而不是空格,因为我认为这样可以使测试更加清晰。在某些情况下,很难看到一个或两个空格之间的区别,或者选项卡和空格之间的区别。
    ${variable.something}
    称为扩展变量语法。它将
    变量
    视为一个对象,而
    某物
    是该对象上的一个属性。这在用户指南中有记录。不运行此步骤是否有任何缺点
    应等于整数
    @Freddy:唯一的缺点是,如果响应不是200(例如:404),则测试可能认为图像是可见的(因为DOM元素在页面上),而实际图像不是(因为URL不正确)@布莱恩:谢谢你的解释。