【问题标题】:How to find a nested selenium WebElement in C# with LINQ?如何使用 LINQ 在 C# 中查找嵌套的 selenium WebElement?
【发布时间】:2019-01-05 19:16:01
【问题描述】:

我一直在学习 LINQ,并试图将其应用于使用 selenium 在页面上查找某些 Web 元素。

我有一个 Angular 网站,它显示一个由 div 组成的表格。一列中的所有行,包括标题,都具有相同的属性(例如 css 选择器/类名等)。

我想找到列中所有可见的输入框,并想出了这个...

var applyBoxes2 = from box in driver.FindElements(By.CssSelector("div.col-apply.col-md-1"))
                  where box.Text != "Apply?"
                  select box;

var clickableBox = from box in applyBoxes2
                   where box.FindElement(By.TagName("input")).Displayed == true
                   select box.FindElement(By.TagName("input"));

第一个查询是必需的,因为第一行是标题,并且不包含输入字段。如果我没有此查询,我的第二个查询将在尝试执行 findelement = "input" 时失败。

有人知道我是否可以将这两个语句结合起来吗?所以首先我会过滤掉标题,然后我会在每个 div 中找到每个输入框。

欢迎任何关于如何改进此功能的想法。

非常感谢,

【问题讨论】:

  • 你不能扩展第一个,例如。 where box.Text != "Apply?" > && && 如果第一个失败则短路,因此当文本为 Apply 时它不会尝试找到它?

标签: c# linq selenium


【解决方案1】:

使用&& 运算符,当它没有通过第一条语句时它会短路。因此,在您的情况下,如果文本为Apply?,它将不会尝试查找元素。

var clickableBox = from box in driver.FindElements(By.CssSelector("div.col-apply.col-md-1"))
                              where box.Text != "Apply?" && box.FindElement(By.TagName("input")).Displayed == true
                              select box.FindElement(By.TagName("input"));

【讨论】:

    【解决方案2】:

    你可以这样做

    var clickableBox = driver.FindElements(By.CssSelector("div.col-apply.col-md-1"))
        .Where(box => box.Text != "Apply?")
        .Select(box => box.FindElement(By.TagName("input")))
        .Where(boxElement => boxElement.Displayed);
    

    【讨论】:

      【解决方案3】:

      您可以使用let 子句, 执行内部子句。

      代码会是这样的:

      var applyBoxes2 = from box in driver.FindElements(By.CssSelector("div.col-apply.col-md-1"))
      let clickableBox = box.FindElement(By.TagName("input"))
                        where box.Text != "Apply?" && clickableBox?.Displayed = True 
                        select clickableBox;
      

      【讨论】:

        猜你喜欢
        • 2018-07-21
        • 2020-06-08
        • 2019-06-04
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 2018-12-01
        • 2017-01-05
        • 1970-01-01
        相关资源
        最近更新 更多