【问题标题】:Cannot loop/iterate through a list of WebElements in Selenium using C#无法使用 C# 循环/迭代 Selenium 中的 WebElement 列表
【发布时间】:2016-06-15 16:38:30
【问题描述】:

我在循环浏览 WebElement 列表时遇到问题。它在第一次迭代中工作,但在第二次迭代中失败。

工作流程

循环 1 正确执行并创建 Web 元素列表。我这样做是因为我认为 Loop 2 失败是因为导航切换(例如单击 web 元素)

在循环 2 执行期间

  1. ListofLinks 已填充
  2. 在第一次迭代中,它工作正常,点击 web 元素并完成循环
  3. 第二次迭代Item.Text 失败。看起来该项目不存在。

有什么想法吗?

    var ListOflinks = new List<IWebElement>();

    //Loop 1
                foreach (var item in driver.FindElements(By.TagName("a")))
                {
                    if (item.Text != "")
                    {
                        ListOflinks.Add(item);
                    }
                }

// Loop 2
 foreach (var item in ListOflinks)
            {
                if (item.Text != "")   // <<<<---- Fails Here
                {
                    // Clicks on Current Link
                    item.Click();
                }
             }

注意:在我尝试 2 循环解决方案之前。我正在经历相同的结果。它适用于第一个 web 元素,然后在第二次迭代中失败。

foreach (var item in driver.FindElements(By.TagName("a")))
            {
                if (item.Text != "")
                {
                    item.Click();
                }
            }

【问题讨论】:

  • 当您点击第一个链接时,页面可能会更改或导航到另一个页面。所以你需要回到原始状态才能进一步导航。
  • 你想在这里测试什么? item.Text != ""
  • 等待元素可见、可点击总是一个好习惯。我建议你在你的代码中实现 wait() ,看看这是否有什么不同。

标签: c# selenium for-loop foreach


【解决方案1】:
IList<IWebElement> links = driver.FindElements(By.TagName("a"));
IList<IWebElement> listOflinks = new List<IWebElement>();

foreach (IWebElement link in links)
{
   if (!string.IsNullOrEmpty(link.Text))
      listOflinks.Add(link);
}

这将为您提供第一次点击后的所有链接referencesDOM 将发生变化,您将丢失所有元素!

要取回元素,您需要再次初始化链接

出于您的目的,您应该使用 for 循环来检查是否获得正确的索引

IList<IWebElement> links = driver.FindElements(By.TagName("a"));
IList<IWebElement> listOflinks = new List<IWebElement>();

for(int i = 0 ; i < links.Count ; i++)
{
   links = driver.FindElements(By.TagName("a"));

   if (!string.IsNullOrEmpty(link[i].Text))
      links[i].Click();
}

如果点击链接后页面被重定向到其他页面,您需要更改逻辑,它不起作用!

【讨论】:

  • 太棒了,这是我的怀疑,但正在努力解决问题。谢谢 Leon!
【解决方案2】:

这可能是因为当单击第一个链接并导航到新视图时,当前视图中不存在先前找到的元素。

如果是这种情况,您可以在第二个循环中导航回来,然后单击该链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多