【问题标题】:Remove web element from the IList <IWebElement> using C# in Selenium在 Selenium 中使用 C# 从 IList <IWebElement> 中删除 web 元素
【发布时间】:2017-10-31 07:31:42
【问题描述】:

如果发生某些情况,我实际上是在尝试从 IList 中删除该元素,但似乎我得到了相同的列表 .Count 编号。以下是我的代码:

    [FindsBy(How = How.XPath, Using = "//button[@aria-label='delete']")]
    private IList <IWebElement> _deleteIcons;

******** SOME CODE HERE **********

    for (var i = 0; i<_deleteIcons.Count; i++)
                {
                    if (_deleteIcons[i].GetAttribute("disabled").Contains("true"))
                    {
                        _deleteIcons.RemoveAt(i);
                    }
                }
    Debug.WriteLine(_deleteIcons.Count);

假设IList中有6个元素,其中2个包含"disabled" =="true"最后我想写调试控制台变量计数并查看4强>。目前,一旦运行这段代码,我仍然会在 IList 中获得相同数量的 6 个元素。

【问题讨论】:

    标签: c# list selenium


    【解决方案1】:

    最简单的方法是使用 CSS 选择器,只选择那些未被禁用的按钮。它会更快,并且您无需事后过滤。

    "button[aria-label='delete']:not([disabled])"
    

    【讨论】:

    • 两种方法都有效,但您的方法似乎更方便。接受它作为答案。谢谢!
    【解决方案2】:

    这是你在 for 循环之前需要做的事情

    _deleteIcons = [CODE_TO_GET_ELEMENETS].ToList()
    

    那么这应该可以工作

    或者您可以使用 Linq 来实现这一点,而无需此循环:

    _deleteIcons = [CODE_TO_GET_ELEMENETS].Where(x => x.GetAttribute("disabled").Contains("true"))
    

    【讨论】:

      【解决方案3】:

      我遇到过类似的情况,我使用 LINQ 查询来重建我正在制作的列表。 System.NotSupportedException: 'Collection is read-only.' thrown when removing object from iList

      我知道你已经有了答案,但也只是把它放在那里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多