是selenium(java)的新手。
我必须点击<ul>
标记下的菜单项<li>
项。我可以使用//*[@id='MainMenu']/li[5]/span
xpath。
我不想硬编码列表项的[5],因为项目的位置可能会改变。它可能不会一直处于第5位。
我想获得带有id的特定标签下特定项目的xpath。
编辑:
这就是我的html的样子。列表项文本将动态加载。
<ul id="sfMainMenu" class="sf-menu ui-selectable">
<li class="ui-selected ui-selectee">
<span subnav="0" param="cmd=desk" filesrc="/Dashboard/Index"></span>
</li>
<li class="ui-selectee"></li>
<li class="ui-selectee"></li>
<li class="ui-selectee"></li>
<li class="ui-selectee">
<span subnav="18" param="cmd=desk" filesrc="../myFile.aspx"></span>
</li>
</ul>
请用一个例子来建议方法。
答案 0 :(得分:1)
我建议尝试这个:
//*[@id='MainMenu']/li[normalize-space() = 'The text you want']/span
虽然如果您能告诉我们实际看起来HTML的内容,我们可以提供更可靠的答案。 XPath没有任何“视觉文本”的概念,所以如果你有一些隐藏在你试图检索的li
内的文本,那可能会相当棘手。
答案 1 :(得分:0)
我已在列表项中使用filesrc
span
标记来解决此问题。
Xpath是:
//span[contains(@filesrc, 'myFile.aspx')]
由于我的.aspx文件对于任何页面都是相同的,所以我使用了包含实际文件名的filesrc属性,并且是该html页面中唯一的文件名。
答案 2 :(得分:0)
您可以使用以下
driver.FindElement(By.XPath("//li[contains(Text(),'Expected Text']")).Click();
或者你可以通过在相关的Class标签
上运行foreach循环来避免xpath foreach (IWebElement e in driver.FindElements(By.ClassName("ui-selectee")))
{
if (e.Displayed && e.Text == "Expected Text")
e.Click();
}