Selenium IWebDriver - 在C#代码中使用foreach的问题

时间:2015-04-22 12:33:53

标签: c# wordpress selenium

我根据Pluralsight教程创建了一个Selenium框架(我不再是付费会员,因此无法获得支持),但我认为我已经遇到教程代码在Selenium的早期版本上工作但不是当前版本的问题。

public class FFDriver {
    public static IWebDriver Instance { get; set; }

    public static void Initialize () {
            Instance = new FirefoxDriver();
            Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
    }

    public static void Wait(TimeSpan timeSpan) {
            Thread.Sleep((int)(timeSpan.TotalSeconds * 1000));
    }

    public static void Close () {
            Instance.Close();
    }
}

这是我用来打开Firefox,导航等的驱动程序。其他类使用它。

下面的代码(来自使用FFDriver类的另一个类)失败:

public static void TrashPost (string title) {
var rows = FFDriver.Instance.FindElement(By.TagName("tr"));

foreach (var row in rows) {
    ReadOnlyCollection<IWebElement> links = null;
    links = row.FindElements(By.LinkText(title));

    if (links.Count > 0) {
        Actions action = new Actions(FFDriver.Instance);
            action.MoveToElement(links[0]);
        action.Perform();
            row.FindElement(By.ClassName("submitdelete")).Click();
            return;
    }
}

代码读取Wordpress网站上帖子的行并删除具有给定标题的帖子,使用Selelinum中的Action类将鼠标悬停在帖子上并单击“废纸篓”链接。

失败并出现此错误:

Error 1 foreach statement cannot operate on variables 
oftype 'OpenQA.Selenium.IWebElement' because 
'OpenQA.Selenium.IWebElement' does not contain a public definition 
for 'GetEnumerator' ...

显然,它之前已经使用了我所使用的教程所使用的Selenium版本。它是一个视频片段,我实际上正在观察他输入代码而没有来自VS的任何错误或警告。

我对C#还不是很好 - 还在学习基础知识 - 所以我真的不确定如何解决这个问题。当然,可能还有其他方法可以解决这个问题,我会采取任何人的建议。

1 个答案:

答案 0 :(得分:1)

FindElement()只返回一个元素。

您需要使用FindElements() (复数)来循环播放它们。

var rows = FFDriver.Instance.FindElements(By.TagName("tr"));