我正在进行Selenium测试,我想断言一个特定的HTML节点是完全匹配的,只要存在哪些属性及其值(顺序不重要),并且还没有其他属性存在。例如,给出以下片段:
<input name="test" value="something"/>
我正在尝试提出一种在HTML输出中断言其存在的好方法,以便以下(任意)示例不匹配: < / p>
<input name="test" value="something" onlick="doSomething()"/>
<input name="test" value="something" maxlength="75"/>
<input name="test" value="something" extraneous="a" unwanted="b"/>
我相信我可以编写一个XPath语句来查找所有这些,例如:
//input[value='something' and @name='test']
但是,我还没有弄清楚如何以一种普遍的方式排除不完全匹配的方式。请注意,它不一定是XPath解决方案,但这让我感到极为优雅。
答案 0 :(得分:2)
如何测试value
和name
属性是否存在,以及属性总数是否为2:
//input[@value='something' and @name='test' and count(attribute::*)=2]
答案 1 :(得分:1)
如果你不喜欢XPath,你也可以使用CSS定位器。这是一个片段,用于计算注册精确CSS匹配的元素数量 -
private int getCSSCount(String aCSSLocator){
String jsScript = "var cssMatches = eval_css(\"%s\", window.document);cssMatches.length;";
return Integer.parseInt(selenium.getEval(String.format(jsScript, aCSSLocator)));
}
不确定如何排除属性,但可以将其他属性指定为 -
int count = getCSSCount("input[name=test][maxlength=75][...]");
答案 2 :(得分:0)
无法使用XPath排除意外属性。
所以你必须找到一种更安全的方法来找到你想要的元素。你应该考虑的事情:
在form
中,每个input
都应该有一个不同的名称。 form
本身也是如此。因此,您可以尝试//form[@name='...']/input[@name='...']
将类添加到您关注的字段中。在任何样式表中都没有提到类。事实上,我使用此类进行表单字段验证,方法是使用decimal number
或alpha number