【发布时间】:2018-05-24 03:52:20
【问题描述】:
我想以一种非常具体的方式搜索一个非常具体的 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" (这使得 contains() 过时)。
正因为如此,我想细分我需要在字符中搜索的两个字符串,然后搜索一个包含所有字符的元素,最大容差为 1 个字符。
这个例子^
getCorrectElement(String1, String2) -> 返回 WebElement
在 (h1/a) [String1] 中搜索“text”,在 (p/a) [String2] 中搜索“cat”
将两个字符串拆分为字符数组
列出所有包含
"t"的元素;获取该列表中包含
"e"的所有条目;-
重复直到没有单词/没有找到元素,
if没有找到元素,尝试查看是否有前一个(或者可能是字符的组合(一如既往,我们有 1 个字符容差),例如。 @987654327 @ @23没有找到,但是我们有一个匹配的元素2和3,如果我们有这样的东西,选择这个元素(或者更好的是,将它添加到新列表中)。 现在我们有一个列表,其中仅包含“文本”为 (h1/a) 的 WebElement 我们将使用它来优化我们的搜索。
我们使用刚刚创建的列表并执行与之前完全相同的过程。
操作完成(找到同时具有“text”(h1/a)和“cat”(p/a)的元素,返回正确的WebElement
这意味着如果输入了"Cool Catto",但没有完全匹配它的元素,它将继续匹配大部分匹配的下一个元素(最多1个字符容差)。
所以"Cool Catto" = "Col Catt",还有"Cool Catto" = "C o o l 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,所以这个方法总是错的
我该怎么做这样的事情?还有其他方法吗? 我想到了地图,但我没有太多经验。
【问题讨论】:
-
您能否总结一下您尝试
locate/getText()的确切条件(text+HTML_TAG)?