当前位置: 首页 > 知识库问答 >
问题:

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

马欣德
2023-03-14

我想以一种非常具体的方式搜索一个非常具体的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”都可以写成这样“t e xt to fi nd”(这使得obsolete contains())。因此,我考虑将需要搜索的两个字符串细分为字符,然后搜索包含所有字符的元素,最大字符容差为1。

此|^的示例

列出包含“t”的所有元素;

获取包含“e”的列表的所有条目;

重复直到没有单词/没有找到元素,

操作完成(找到同时具有“text”(H1/A)和“cat”(P/A)的元素,返回正确的WebElement

这意味着,如果输入了“cool catto”,但没有与它完全匹配的元素,它将进入与它大部分匹配的下一个元素(最大1个字符容差)。

所以“cool catto”=“col Catt”,也“cool catto”=“C o o l Catt o”

我尝试将xpath搜索设置为text(),但此xpath表达式a[contains(text(),'text to find')]/../../p/a[contains(text(),'text to find')]只返回“text to find 2”,而不返回两者。

如果我使用[contains()和contains()],表达式返回的元素可能只与单个“text to find”匹配,而我需要的元素只与两者匹配。

另外,我很确定您不能执行String->WebElement,所以这个html" target="_blank">方法总是错误的

我怎么会做这样的事?还有别的办法吗?我想到了地图,但我没有太多的经验。

共有1个答案

胡星汉
2023-03-14

性能会差很多,但是您可以返回一个可能元素的列表,然后在您的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选择器不足时使用的模式。(我们)有数百个测试需要几个小时才能运行,所以这些延迟是一个相当大的问题。

 类似资料:
  • 本文向大家介绍在Python中查找以特定字母开头的列表元素,包括了在Python中查找以特定字母开头的列表元素的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将从列表中找到所有以特定字母开头的元素。 使用索引和lower 我们使用lower函数,以便以后的测试可以与列表中元素的首字母匹配,而不考虑大小写。然后,我们使用0处的索引,以便将列表中元素的第一个字母与测试字母进行比较。 示例 输出

  • 主要内容:index() 方法,count()方法Python 列表(list)提供了 index() 和 count() 方法,它们都可以用来查找元素。 index() 方法 index() 方法用来查找某个元素在列表中出现的位置(也就是索引),如果该元素不存在,则会导致 ValueError 错误,所以在查找之前最好使用 count() 方法判断一下。 index() 的语法格式为: listname.index(obj, start, en

  • 问题内容: 我有一个清单“ a” 我需要找到一个特定数字的所有元组。说1 我怎么做? 问题答案: 如果只希望第一个数字匹配,则可以这样操作: 如果您仅搜索其中包含1的元组:

  • 问题陈述:- 我想在每个k个列表中搜索单个元素。 显然,我可以单独对每个数组进行二分搜索,这将得到O(k log n),其中k是排序数组的数目。 我们能在O(k+logn)中做吗,其中k是排序数组的个数?我想可能有更好的方法,因为我们现在做了k次同样的搜索- 这有可能实现吗?谁能提供一个例子,这是如何工作的基础上我的例子?

  • 我有下面的代码- 是包含int属性的类对象列表-参考号:即

  • 我试图从html代码中获取子元素(卡号),其中html标记和类名相同。下面是html代码片段 下面是我尝试的标识符。但都返回了第一个卡号 "************4305”。 尝试了其他选项:这也返回了第一个卡号“************4305”。