【发布时间】:2017-09-13 23:17:50
【问题描述】:
Robot Framework 中是否有关键字来确保元素具有特定的类?类似的东西
Element should has class element className
或者,我可以检查元素是否具有具有特定值的特定属性。不过前者会更合适,因为元素可能包含多个类。
【问题讨论】:
标签: html selenium testing tdd robotframework
Robot Framework 中是否有关键字来确保元素具有特定的类?类似的东西
Element should has class element className
或者,我可以检查元素是否具有具有特定值的特定属性。不过前者会更合适,因为元素可能包含多个类。
【问题讨论】:
标签: html selenium testing tdd robotframework
您可以通过 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。
【讨论】:
| FAIL | Element 'loginButton[contains(@class, 'button-blue')]' did not appear in 5 seconds 即使有一个 id 为 loginButton 和类 button-blue 的元素。我还假设第一个示例中的 className 需要花括号来评估变量。
loginButton 不是有效的 XPath 或 CSS 选择器,请使用 #loginButton 或 //*[@id='loginButton']。
这是另一种解决方案(尽管接受的答案的 CSS 非常好),适用于任何类型的选择器策略:
Element should have class
[Arguments] ${locator} ${target value}
${class}= Get Element Attribute ${locator}@class
Should Contain ${class} ${target value}
它可以针对任何其他属性进行修改 - 只需将 Get Element Attribute 中的 @class 替换为它(或者甚至将其设为可选参数)。
【讨论】:
此页面上的某些解决方案可能会受到子字符串匹配的影响。检查类属性(例如test-run)是否包含类(例如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
【讨论】:
以下是两种方式的示例:
${temp}= get element attribute xpath=/elementpath class
should contain ${temp} ${ClassName}
或
Wait until page contains element xpath=/elementpath[contains(@class, '${ClassName}')
【讨论】: