xpath <a> <span> C#</span></a>的webdriver findelement

时间:2014-12-16 09:57:51

标签: c# xpath hyperlink webdriver

我需要使用C#在webdriver中创建一个测试,然后单击一个带有&#34; Text&#34;的链接。在菜单中有这样的结构:

<ul style="overflow: hidden">
    <li>
        <ul class"menu" style="overflow: hidden">
            <li class="class_li">
                <a href="/level1/leve2">
                    <span class="class_span">Text</span>
                </a>
            </li>
        </ul>

    </li>
    <li />
    <li />
</ul>

课程&#34;&#34; class_li&#34;和&#34; class_span&#34;多次使用。我无法修改html代码。

我尝试了几个不同的xpath语句,但每次我得到&#34; InvalidSelectorException未处理&#34;。如何访问我的链接并单击它?

3 个答案:

答案 0 :(得分:0)

以下xpath选择第一个a链接,其中包含带有文字span的直接子Text

(//a[span/text()='Text'])[1]

我不是Selenium专家,但你应该能够做到这一点:

driver.FindElement(By.XPath("(//a[span/text()='Text'])[1]")).Click();

答案 1 :(得分:0)

好的,所以我做到了。我使用了基于StuartLC答案的Actions和XPath,它看起来像这样:

IWebElement element = driver.FindElement(By.XPath("//a[span/text()='text_from_upper_node']"));
Actions action = new Actions(driver);
action.MoveToElement(element).Build().Perform();
driver.FindElement(By.XPath("//a[span/text()='text_from_link_I_want_to_click']")).Click();

谢谢你的帮助。欢呼声

答案 2 :(得分:0)

如果您可能想要使用多个树,您可以尝试这样的事情吗?

        IList<IWebElement> webElements = WebDriver.FindElements(By.ClassName("class_span"));

然后您可以在列表中枚举以点击您想要的内容,甚至可以点击以下内容:

        var text = webElements.FirstOrDefault(x => x.Text == "Text");
        text.Click();