C#; WebDriver:尝试使用linktext单击时,字符串数组将变为null

时间:2014-09-17 18:38:28

标签: c# selenium selenium-webdriver

我正在尝试阅读以下列表:

<ol class="sublist">
<li>
<a href="/Home/Article.aspx?    level=3XAP2FPAX6J7I3kztATGuYyXAP2BPAXDahIQXAP3DPAXXAP3DPAX&articleId=R866G0jVPwSUTNiC7yuIXAP2BPAXQXAP3DPAXXAP3DPAX">Sort Out Your Values</a>
</li>
<li>
<a href="/Home/Article.aspx?level=3XAP2FPAX6J7I3kztATGuYyXAP2BPAXDahIQXAP3DPAXXAP3DPAX&articleId=v2CBBm83qhsNjLKWbtfCNwXAP3DPAXXA P3DPAX">Establish Realistic Goals</a>
</li>
<li>
<a href="/Home/Article.aspx?  level=3XAP2FPAX6J7I3kztATGuYyXAP2BPAXDahIQXAP3DPAXXAP3DPAX&articleId=yBjSNWqdoXAP2FPAXvuZzib2H88pQXAP3DPAXXAP3DPAX">Determine Your Monthly Net Income</a>

这是我为它写的代码;但目前,每次运行;我的字符串空了。我想获取内部文本,以便在我的循环中抓住它并单击它并返回上一屏幕。

IWebElement  container = driver.FindElement(By.ClassName("sublist"));
IList<IWebElement> elements = driver.FindElements(By.TagName("a"));       
        string [] newlink = new string[elements.Count()];

        for (int i = 0; i < newlink.Count(); i++)
        {
            if (newlink[i] != null)
            {
                driver.FindElement(By.LinkText(newlink[i])).Click();
                driver.WaitForElement(By.CssSelector("[id$='hlnkPrint']"));
                driver.Navigate().Back();
            }
        }

该脚本能够运行但是得到的链接为空,所以我添加了一个检查,看看它们中是否有任何一个是空的,结果是所有这些都是。 我确定它与'.text'或'ToString'有关,但我不知道在哪里实现它。

由于

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题 - 您尚未设置newlink的值,只是创建它。
- Count是属性,但您将其用作方法 - 链接文本是.Text的{​​{1}}属性,您需要访问该属性 - 您当前的代码可能会点击一个链接,返回后会抛出IWebElement

以下
- 我将StaleElementException设置为newlink的链接的Text值 - 然后我遍历链接文本数组

elements

您可以在IWebElement container = driver.FindElement(By.ClassName("sublist")); IList<IWebElement> elements = container.FindElements(By.TagName("a")); string[] newlink = new string[elements.Count]; for (int i = 0; i < newlink.Count; i++) { newlink[i] = elements[i].Text; } for (int i = 0; i < newlink.Count; i++) { if (newlink[i] != null) { driver.FindElement(By.LinkText(newlink[i])).Click(); driver.WaitForElement(By.CssSelector("[id$='hlnkPrint']")); driver.Navigate().Back(); } } 上使用FindElement()。所以在这种情况下,如果你想找到IWebElement个孩子的元素,你可以使用container