繁体   English   中英

排序WebElement列表以查找特定的元素(Selenium WebDriver / Java)

[英]Sorting a WebElement List to find specific Element (Selenium WebDriver/Java)

我想以一种非常特定的方式搜索一个非常特定的WebElement。

WebElement看起来像这样:

<aw>
    <div class="class">
        <h1>
            <a class="class1">TEXT TO FIND 1</a> 
        </h1>
        <p>
            <a class="class2"> TEXT TO FIND 2 </a>
        </p>
    </div>
</aw>

这两个"text to find"可以这样写: "te xt to fi nd" (这使过时的contains())。 因此,我想到了将需要搜索的两个字符串细分为字符,然后搜索包含所有字符的元素,最大容差为1个字符。

这个例子^

getCorrectElement(String1,String2)->返回WebElement

在(h1 / a)[String1]中搜索“文本”,在(p / a)[String2]中搜索“ cat”

  • 将两个字符串都分成字符数组

  • 列出所有包含"t"元素;

  • 获取该列表中包含"e"所有条目;

  • 重复直到您没有剩余的单词/找不到元素,

    if未找到任何元素,请尝试查看是否有前一个(或字符的组合(一如既往,我们具有1个字符的公差),例如 1 2 3 找不到,但是我们有一个匹配 2 的元素 3如果我们有类似的内容,请选择该元素(或者更好的是,将其添加到新列表中)。

  • 现在,我们有了一个列表,其中仅包含Web元素,这些Web元素的“文本”为(h1 / a),我们将使用它来优化搜索。

  • 我们使用刚刚创建的列表,并执行与之前完全相同的过程。

  • 操作完成(找到同时带有“文本”(h1 / a)和“猫”(p / a)的元素,返回正确的WebElement

这意味着,如果输入了"Cool Catto" ,但没有完全匹配的元素,它将继续与大部分元素匹配的下一个元素(最大1个字符的容差)。

因此, "Cool Catto" = "Col Catt" ,也"Cool Catto" = "C ool Catt o"

我尝试让xpath搜索到toText(),但是此xpath表达式a[contains(text(), ' text to find ')]/../../p/a[contains(text(),' text to find')] ,仅返回"text to find 2" ,而不同时返回两者。

如果我使用[contains() and contains()] ,则表达式返回的元素可能只匹配单个"text to find" ,而我需要的东西只能匹配两个。

另外,我很确定你不能做String-> WebElement,所以这个方法总是错误的

我该怎么做? 还有其他方法吗? 我想到了地图,但是我对这些没有太多经验。

性能会差很多,但是您可以返回可能的元素列表,然后在Java代码中执行更高级的过滤。 我在示例中使用C#,但是等效的Java应该非常相似。

var element = webDriver
    // Find all elements that are a direct child of the parent element
    .FindElements(By.CssLocator("aw > div.class > *"))
    // Get the first element matching the criteria
    .FirstOrDefault(e => {
        // Simply remove spaces. Regex could also be used
        string.Equals(e.Text.Replace(" ", ""), "TEXTTOFIND");
    });

我说过性能会变差,因为WebDriver将不得不查询/序列化更多对象,如果对象过多,则可能导致明显的延迟。 这是我仅在CSS或jquery选择器不足时使用的模式。 [我们有数百个测试,这些测试需要几个小时才能运行,所以这些延迟是一个相当大的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM