我根据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#还不是很好 - 还在学习基础知识 - 所以我真的不确定如何解决这个问题。当然,可能还有其他方法可以解决这个问题,我会采取任何人的建议。
答案 0 :(得分:1)
FindElement()
只返回一个元素。
您需要使用FindElements()
(复数)来循环播放它们。
var rows = FFDriver.Instance.FindElements(By.TagName("tr"));