如何迭代一些IWedElements

时间:2017-05-24 17:04:59

标签: c# selenium

我有以下代码:

IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(some url);

IWebElement locator_1 = driver.FindElement(By.Id("locator_id"));
IWebElement locator_2 = driver.FindElement(By.Name("locator_name"));
IWebElement locator_3 = driver.FindElement(By.TagName("p"));
IWebElement locator_4 = driver.FindElement(By.ClassName("locator_class"));
IWebElement locator_5 = driver.FindElement(By.LinkText("myLocator(5)"));
IWebElement locator_6 = driver.FindElement(By.PartialLinkText("locator (6)"));
IWebElement locator_7 = driver.FindElement(By.CssSelector("input[myname='selenium']"));
IWebElement locator_8 = driver.FindElement(By.XPath("//button[@class='btn btn-2']"));

我希望使用循环遍历所有这些元素并打印每个定位器的文本值。但是,我对一般编码和Selenium都很陌生,并没有找到一个不错的方法来做到这一点,而不涉及手动输入locator_[i].Text的八行代码 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

为了遍历这些定位器,您需要将它们添加到可迭代的数据结构中。数组,列表等...

如果您知道要撤出的地点数量,可以使用数组,否则请使用列表。

使用列表的简单示例:

IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(some url);
var locators = new List<IWebElement()
{
    driver.FindElement(By.Id("locator_id")),
    driver.FindElement(By.Name("locator_name")),
    driver.FindElement(By.TagName("p")),
    driver.FindElement(By.ClassName("locator_class")),
    driver.FindElement(By.LinkText("myLocator(5)")),
    driver.FindElement(By.PartialLinkText("locator (6)")),
    driver.FindElement(By.CssSelector("input[myname='selenium']")),
    driver.FindElement(By.XPath("//button[@class='btn btn-2']"))
};

foreach (var locator in locators)
{
    // Print out the value of text however you want, I'm using the Console because I'm not sure what your preference is
    Console.WriteLine(locator.text);
}