使用Robot框架拍摄失败的屏幕截图

时间:2015-10-20 12:15:03

标签: robotframework

我是机器人框架的新手。我想知道如何在失败时捕获屏幕截图。 如果脚本失败,机器人框架是否会自动截取屏幕截图? 一个例子将是非常有帮助的!

4 个答案:

答案 0 :(得分:5)

如果您正在进行基于Selenium的测试,这实际上是机器人需要的Selenium2Library的一个功能。

可在此处找到更多信息:http://robotframework.org/Selenium2Library/doc/Selenium2Library.html

正如它所说的文档,设置失败的屏幕截图非常容易,例如,这是我正在使用的测试套件中的:

SET NOCOUNT ON
declare @deps TABLE (name nvarchar(512), dep_name nvarchar(512))
declare @ordered TABLE (name nvarchar(512), [level] INT)

insert @deps(name, dep_name)
SELECT DISTINCT CAST(OBJ.name as nvarchar(512)) AS ObjectName, 
                CAST(REFOBJ.name as nvarchar(512)) AS ReferencedObjectName
FROM sys.sql_dependencies AS DEP
     INNER JOIN
     sys.objects AS OBJ
         ON DEP.object_id = OBJ.object_id
     INNER JOIN
     sys.schemas AS SCH
         ON OBJ.schema_id = SCH.schema_id
     INNER JOIN sys.objects AS REFOBJ
         ON DEP.referenced_major_id = REFOBJ.object_id
     INNER JOIN sys.schemas AS REFSCH
         ON REFOBJ.schema_id = REFSCH.schema_id
     LEFT JOIN sys.columns AS REFCOL
         ON DEP.class IN (0, 1)
            AND DEP.referenced_minor_id = REFCOL.column_id
            AND DEP.referenced_major_id = REFCOL.object_id
WHERE OBJ.type_desc IN ('VIEW','SQL_STORED_PROCEDURE','SQL_INLINE_TABLE_VALUED_FUNCTION','SQL_TRIGGER','SQL_SCALAR_FUNCTION')
    AND REFOBJ.type_desc IN ('VIEW','SQL_STORED_PROCEDURE','SQL_INLINE_TABLE_VALUED_FUNCTION','SQL_TRIGGER','SQL_SCALAR_FUNCTION')

insert @ordered(name, [level])
select distinct d1.dep_name, 1 as [level]
from @deps d1
    LEFT JOIN @deps d2 ON d1.dep_name = d2.name
where d2.name IS NULL

WHILE EXISTS(select * from @deps)
BEGIN 
    delete d
    FROM @deps d
        JOIN @ordered o ON d.name = o.name

    insert @ordered(name, [level])
    SELECT DISTINCT d0.name, (select MAX([level]) + 1 FROM @ordered) 
    FROM @deps d0
        LEFT JOIN (
            SELECT d.name
            from @deps d
                LEFT JOIN @ordered o ON d.dep_name = o.name
            WHERE o.name IS NULL
        ) dfilter ON d0.name = dfilter.name
    WHERE dfilter.name is NULL
END

select * from @ordered
ORDER by level asc

答案 1 :(得分:3)

您可以使用以下关键字在您想要的任何步骤之后捕捉屏幕截图:

Capture Page Screenshot

希望如此有用!

答案 2 :(得分:0)

在这种情况下,一旦执行/不执行测试用例就会执行拆解,如果测试用例失败,则会截取屏幕截图:

.id_str

如果你不需要不同的拆解特定测试,你可以在套件级别上做得更好:

[Teardown]    Run Keyword If Test Failed    Capture Page Screenshot

答案 3 :(得分:0)

到目前为止,所有其他答案都假设您使用的是Selenium

如果不是,则会有一个“屏幕截图”库,其中包含关键字“截屏”。要包含此库,您只需在设置表中添加“库截图”。

在我的机器人框架代码中,我的拆解只是引用了一个名为“Default Teardown”的关键字,定义为:

Default Teardown
    Run Keyword If Test Failed    Take Screenshot
    Close All

(我认为Close All可能是我的自定义关键字之一)。

我注意到Take Screenshot关键字存在一些问题。其中一些可能是可配置的,但我不知道。首先,它会截取您的屏幕截图,而不仅仅是您感兴趣的应用程序。因此,如果您正在使用此屏幕并允许其他人查看生成的屏幕截图,请确保您没有任何内容屏幕上的其他内容,您不想分享。

此外,如果您启动测试然后锁定屏幕以便在运行时快速休息,那么所有屏幕截图都只是锁定屏幕的图片。

我在Jenkins服务器上也使用它,它使用xvfb-run命令创建一个伪GUI来运行机器人框架测试。如果你也这样做,请确保在你的xvfb-run命令中包含的内容

xvfb-run --server-args="-screen 0 1024x768x24" <rest of your command>

您必须决定哪种屏幕分辨率最适合您,但我发现使用默认屏幕分辨率时,我的应用只占了一小部分。

长话短说,如果您使用硒,我认为您最好使用Capture Page Screenshot。但是,如果你不是,这可能是你最好的(或唯一的)解决方案。