在特定标记下获取xpath

时间:2014-05-11 03:37:57

标签: selenium xpath selenium-webdriver

是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>

请用一个例子来建议方法。

3 个答案:

答案 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();
        }