该页面包含一个多选下拉菜单(类似于以下内容)
html代码如下所示:
<div class="button-and-dropdown-div>
<button class="Multi-Select-Button">multi-select button</button>
<div class="dropdown-containing-options>
<label class="dropdown-item">
<input class="checkbox">
"
Name
"
</label>
<label class="dropdown-item">
<input class="checkbox">
"
Address
"
</label>
</div>
在firefox开发人员工具中进行测试之后,我终于能够弄清楚所需的xPath,以便获取特定标签的文本...
下面的XPath语句将返回文本“ Phone”
$x("(//label[@class='dropdown-item'])[4]/text()[2]")
标签元素中包含多个文本项(尽管在查看UI时看起来只有一个文本对象)。每个标签元素中实际上有两个文本元素。第一个始终为空,第二个包含实际文本(如下图所示,通过Firefox开发人员工具的控制台窗口观察该元素时):
问题:
如何修改上面显示的XPath以便在Selenium的FindElement中使用?
Driver.FindElement(By.XPath("?"));
我知道如何使用包含工具,但显然不使用更复杂的XPath语句。我非常确定以下其中一项可以使用,但不能使用(开发工具抱怨语法错误):
$x("(//label[@class='dropdown-item' and text()[2][contains(., 'Name')]]")
$x("(//label[@class='dropdown-item' and contains(text()[2], 'Name')]")
我正在使用“容器”以避免空白冲突。
其他用于学习的目的(适用于XPath调试)
以防万一有人碰到XPath的新手,我想展示一下这些标签对象的数据结构。您可以使用开发人员工具(F12)中的Firefox控制台窗口来浏览网页中对象的数据结构。如您所见,label元素包含三个子项;文本为空,然后是输入复选框,然后是其他文本,其中有实际文本(不理想)。在下面的图片中,您可以看到网页中与标签数据结构相对应的部分。
答案 0 :(得分:0)
如果您要查找包含上述HTML的包含“名称”的元素,则可以使用
//label[@class='dropdown-item'][contains(.,'Name')]
答案 1 :(得分:0)
所以终于可以使用了。 Firefox开发人员环境指出XPath字符串存在语法问题时是正确的。
以下XPath字符串最终返回了所需的结果:
$x("//label[@class='dropdown-item' and contains(text()[2], 'Name')]")