我正在尝试使用名为 Selenium (webrat) 的软件来模拟用户与浏览器的交互
例如,我尝试将名称为“john”的用户名字段放入
但是“用户名文本框”的“id”是 username_947232、username_8237
用户名_[随机数]的格式
我的语法如下:
//*[contains(@id="username_(/\d+/)")]
但它不起作用,有人有任何想法吗?
谢谢您的建议!
最佳答案
使用:
//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
说明:
此表达式选择其 id
属性的字符串值以字符串 "username_"
开头的任何元素以及该字符串的其余部分(在起始 "之后) username_"
) 是一个整数。
这里我们使用以下事实:当且仅当 $string
表示整数时,以下表达式为 true:
floor($string) = $string
基于 XSLT 的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
"//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于此 XML 文档时:
<t>
<user id="username_Xyz"/>
<user id="username_Xyz123"/>
<user id="username_123Xyz"/>
<user id="username_123Xyz456"/>
<user id="username_2015"/>
</t>
计算 Xpath 表达式,并将从此计算中选择的节点复制到输出:
<user id="username_2015"/>
请注意:此问题的其他两个答案将从上述文档中选择所有 5 个 user
元素 - 这当然是不正确的。
关于web-applications - Selenium IDE 1.9.1 xpath 包含选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081475/