查看所有链接Selenium C#

时间:2015-03-29 15:12:17

标签: c# selenium

我试图自动测试网站上的所有链接。 但问题是我的foreach循环在第一次点击后停止。

当我在Console.log中时,它会写出所有链接的属性,但是当它点击时间时不会这样做:)

这会记录所有链接。

 [FindsBy(How = How.TagName, Using = "a")]
 public IWebElement hrefClick { get; set; }

    public void TestT2Links()
    {
        foreach (IWebElement item in PropertiesCollection.driver.FindElements(By.TagName("a")))
        {
            Console.WriteLine(item.GetAttribute("href"));

        }
    }

但是当我尝试使用Click()函数时,它只会点击第一个链接。

 [FindsBy(How = How.TagName, Using = "a")]
 public IWebElement hrefClick { get; set; }

    public void TestT2Links()
    {
        foreach (IWebElement item in PropertiesCollection.driver.FindElements(By.TagName("a")))
        {
            hrefClick.Click();

            Console.WriteLine(item.GetAttribute("href"));
        }
    }

我还尝试使用back方法在每次点击后返回导航,但也无用和错误:(

PropertiesCollection.driver.Navigate().Back();

任何提示? 提前致谢

3 个答案:

答案 0 :(得分:4)

您需要找到所有链接。您使用的[FindsBy]会返回 a 链接而非列表。首先找一个集合

[FindsBy(How = How.TagName, Using = "a")]
public IList<IWebElement> LinkElements { get; set; }

修改

只需点击,只需点击WebElements列表,就可能会因StaleElement刷新而返回DOM引用异常。使用for loop并找到元素运行时。

[FindsBy(How = How.TagName, Using = "a")]
public static IList<IWebElement> LinkElements { get; set; }


private void LoopLink()
{
    int count = LinkElements.Count;

    for (int i = 0; i < count; i++)
    {
        Driver.FindElements(By.TagName("a"))[i].Click();
        //some ways to come back to the previous page
    }

}

答案 1 :(得分:1)

另一种无需点击的解决方案

public void LoopLink() {
    int count = LinkElements.Count;

    for (int i = 0; i < count; i++)
    {
        var link = LinkElements[i];
        var href = link.GetAttribute("href");

        //ignore the anchor links without href attribute
        if (string.IsNullOrEmpty(href))
            continue;

        using (var webclient = new HttpClient())
        {
            var response = webclient.GetAsync(href).Result;
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
        }
    }
}

答案 2 :(得分:0)

替换

hrefClick.Click();

item.Click()
在你的foreach()循环中