使用Selenium Webdriver,C#在dl,dt下查找元素

时间:2013-04-11 17:08:00

标签: c# selenium webdriver

我在C#中使用Selenium Webdriver 2.30。如果有人能告诉我如何在以下结构中点击链接(id =“e”),我感激不尽。

<frame name = "a">
    #document
        <html>
            <head></head>
            <body>
                <div id = "b">
                    <dl id= "c">
                        <dt class = "d">
                            <a href = "http://somewhere.com" id = "e" class> Go to somewhere</a>
                        </dt>
                        <dt>
                            <a href = "http://something.com" id = "f"> Find something </a>
                        </dt>
                    </dl>
                </div>
            </body>
        </html>     
</frame>

我试过

selenium.SwitchTo().Frame("a");
selenium.FindElement(By.XPath("//a[@id=\"e\"]")).Click();

尝试了

selenium.SwitchTo().Frame("a");
selenium.FindElement(By.XPath("//div[@id='b']/dl[1]/dt[1]/a")).Click();

我也试过

selenium.SwitchTo().Frame("a");
selenium.FindElement(By.LinkText("Go to somewhere")).Click();

不幸的是,它们都不起作用。问题可能是因为定义列表下的元素有所不同,但我还没想到。

1 个答案:

答案 0 :(得分:0)

抛出的异常消息在这里可能很有用,如果可以,则发布。

首先,你需要确保它在正确的框架中。 尝试调试以下内容并查看计数是否正确。

selenium.SwitchTo().Frame("a");
IList<IWebElement> dt = selenium.FindElements(By.XPath("//div[@id='b']//dt"));

// alternative way
selenium.SwitchTo().Frame(selenum.FindElement(By.CssSelector("frame[name='a']")));
IList<IWebElement> dt = selenium.FindElements(By.CssSelector("#b dt"));

如果它在正确的框架中,请使用Firebug验证xpath或cssSelector。我也会尝试以下方法。请记住确保元素实际已加载。 WebdriverWait可能有用。

selenium.FindElement(By.CssSelector("#e")).Click();
selenium.FindElement(By.CssSelector("dt.d>a")).Click();
selenium.FindElement(By.XPath("//a[text()='Go to somewhere']")).Click();
selenium.FindElement(By.XPath("(//dl[@id='c']/dt/a)[1]")).Click();