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

使用xpath比较两个DOM元素

柯宜年
2023-03-14
.//*[@id='1']/div/ul/li[5]

.tab-header-home

现在我希望从基于id的XPath生成唯一的基于类的XPath。Firepath生成的类XPath可能指向多个元素,而不是唯一的。但是firepath生成的id XPath总是唯一的,即指向单个元素。

所以,我正在尽可能地生成两个之间的映射。但我需要测试以下内容:

 xpath( .//*[@id='1']/div/ul/li[5]) == xpath(.tab-header-home )

以确保我创建的类xpath对应于所需的DOM元素。任何帮助都将得到高度赞赏。我希望生成的xpath示例是:

.//*[@id='29']/descendant::div[@class='template-parent-search-box']

目标是减少xpath的深度,以便DOM结构中的任何更改(如添加Div等)都不会使xpath无效。

共有1个答案

慎峻
2023-03-14

您到底是如何使用XPath的?请注意,XPath在IE中可能无法工作,至少在没有shim的情况下是这样的(它的原生支持仅限于XML)。

但是使用适当的polyfill/shim,您应该能够只比较DOM元素(或者在返回多个XPath结果的情况下遍历每个XPath结果并比较每个单独的项)。

if (xPathClassDOM === xPathIDDDOM) {...}

此外,.tab-header-home不是XPath,而是CSS选择器,但如果您抓取了DOM元素,例如通过document.queryselector)将其与从XPath检索的元素进行比较。

例如:

JavaScript:

var classBasedExpression = ".tab-header-home"; // CSS-Selector-based
var idBasedExpression = ".//*[@id='1']/div/ul/li[5]"; // XPath-based


var firstCSSSelection = document.querySelector(classBasedExpression);

var iterator = document.evaluate(idBasedExpression, document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null ); 

try {
  var thisNode = iterator.iterateNext();

  while (thisNode) {
    if (firstCSSSelection === thisNode) {
      alert('found!')
      break;
    }
    thisNode = iterator.iterateNext();
  }
}
catch (e) {
    alert('error:' + e);
}

HTML:

<div id="1">
    <div>
        <ul>
            <li>a</li>
            <li>b</li>
            <li>c</li>
            <li>d</li>
            <li class="tab-header-home">e</li>
        </ul>
    </div>
</div>
 类似资料:
  • 我得到了两个字符串类型arraylist。一个列表包含“book1”、“book2”、“book3”和“book4”。另一个arrayList包含“book1”、“book2”、“book3”。因此,第一个列表的大小为4,第二个列表的大小为3。我创建了另一个与第一个列表大小相等的arrayList 但是当我这样做的时候,我不能设置1,因为我不能进入if状态,有人能帮我吗

  • 问题内容: 我得到了两个String类型的arraylist ..一个包含“ book1”,“ book2”,“ book3”和“ book4”的列表。另一个arrayList包含“ book1”,“ book2”,“ book3”。因此,第一个列表的大小为4,第二个列表的大小为3。我创建了另一个与第一个列表的大小相等的arrayList 如果两个列表之间的内容相等,那么我将设置为1而不是0。 所

  • 请帮助我提供一个解决方案,通过使用SeleniumRubyWebDriver比较Web应用程序的两个URL中的两个图像是否相同(我的意思是每个图像中的内容都相同)。 例如:访问下面的网址时,我有一个小图像显示: 访问下面的URL时,我还有另一个图像: 我怎样才能比较这两个图像,看看他们是否是相同的使用Selenium Ruby WebDrive?任何建议都很感激。非常感谢。

  • 我想比较ArrayList中的两个元素,我编写了以下代码: 结果为,但具有其他值,如: 我知道比较的是引用,而不是值,在这种情况下,这两个整数有不同的引用,因此从逻辑上讲,这两种情况都必须有。我不明白为什么我只对从的取而对其他取。 注:我在Stackoverflow和Google上看到很多问题,但我找不到我问题的答案

  • 我需要获得一个DOM元素的XPath来持久化它,这样我就可以查找该元素。 我已经尝试了这个答案的方法,但是当我用jQuery创建的对象调用该方法时... ...我得到这个错误: 未捕获的TypeError:无法读取未定义(…)的属性“子节点” 我尝试将替换为,将替换为,将替换为,但我收到未定义为函数结果的... 那么,您是否有一个与类似的函数可以使用jQuery呢?

  • 问题内容: 有人遇到过这个问题吗?假设您有两个类似以下的数组 有没有一种方法可以比较b中a中的哪些元素?例如, 我正在尝试避免循环,因为要花费数百万个元素才能解决问题。有任何想法吗? 干杯 问题答案: 实际上,有一个比以下任何一种方法更简单的解决方案: 所得的c为: