在Selenium

时间:2017-03-28 21:38:54

标签: c# list selenium

我实际上是在尝试从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"最后我想向调试控制台写入变量count并查看 4 即可。目前,一旦运行了这段代码,我仍然可以在IList中获得相同数量的6个元素。

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用CSS选择器,然后选择那些未禁用的按钮。它会更快,您不需要在之后进行过滤。

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

答案 1 :(得分:0)

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

_deleteIcons = [CODE_TO_GET_ELEMENETS].ToList()

然后这应该工作

或者您可以使用Linq实现此目的而无需此循环:

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

答案 2 :(得分:0)

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

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