机器人框架,如何检查class

Robot framework, how to check class

Robot Framework 中是否有关键字来确保元素具有一定的class?像

Element should has class element className

或者,我可以检查元素是否具有具有特定值的特定属性。不过,前者会更合适,因为元素可能包含多个 classes.

您可以通过 XPath 选择器创建新关键字:

Element should have class
    [Arguments]  ${element}  ${className}
    Wait until page contains element  ${element}[contains(@class, '${className}')]

或通过 CSS 选择器:

Element should have class
    [Arguments]  ${element}  ${className}
    Wait until page contains element  ${element}.${className}

Wait until page contains element 可以替换为您喜欢的任何关键字以检查元素是否存在且可见,例如 Element should be visible.

这是一个替代解决方案(虽然已接受的答案 CSS 非常好),适用于任何类型的选择器策略:

Element should have class
    [Arguments]  ${locator}  ${target value}

    ${class}=       Get Element Attribute  ${locator}@class
    Should Contain  ${class}        ${target value}

它可以针对任何其他属性进行修改 - 只需将 Get Element Attribute 中的 @class 替换为它(或者甚至将其设为可选参数)。

下面是两种方式的示例:

    ${temp}=    get element attribute       xpath=/elementpath    class
    should contain        ${temp}   ${ClassName}

 Wait until page contains element  xpath=/elementpath[contains(@class, '${ClassName}')

此页面上的某些解决方案可能会遇到子字符串匹配问题。检查 class 属性(例如 test-run)是否包含 class(例如 test)可能会通过,即使它应该会失败。

有几种方法可以解决这个问题,但最后,我做了以下事情:

Element Should Have Class
    [Arguments]                ${locator}               ${class}
    ${escaped}=                Regexp Escape            ${class}
    ${classes}=                Get Element Attribute    ${locator}        class
    Should Match Regexp        ${classes}               \b${escaped}\b

Element Should Not Have Class
    [Arguments]                ${locator}               ${class}
    ${escaped}=                Regexp Escape            ${class}
    ${classes}=                Get Element Attribute    ${locator}        class
    Should Not Match Regexp    ${classes}               \b${escaped}\b