我正在尝试使用软件名称 Selenium (web rat) 来模拟用户与浏览器的交互
例如,我试图将用户名字段命名为 'john
但是“用户名文本框”的“id”是 username_947232, username_8237
其中 username_[随机数] 的格式
我的语法如下:
//*[contains(@id="username_(/\d+/)")]
但它不起作用,有人知道吗?
感谢您的任何建议!
我正在尝试使用软件名称 Selenium (web rat) 来模拟用户与浏览器的交互
例如,我试图将用户名字段命名为 'john
但是“用户名文本框”的“id”是 username_947232, username_8237
其中 username_[随机数] 的格式
我的语法如下:
//*[contains(@id="username_(/\d+/)")]
但它不起作用,有人知道吗?
感谢您的任何建议!
使用:
//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
说明:
此表达式选择其属性的字符串值以id
字符串开头且该字符串"username_"
的其余部分(在开始之后"username_"
)是整数的任何元素。
$string
这里我们使用以下表达式为真当且仅当表示一个整数的事实:
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"/>
请注意:此问题的其他两个答案user
将从上述文档中选择所有 5 个元素——这当然是不正确的。
采用starts-with
//*[starts-with(@id, "username_")]
你应该可以使用
//*[contains(@id, 'username_')]
虽然如果你最后可能有除数字以外的任何东西,这可能不是最佳选择。