gpt4 book ai didi

selenium - By.id、By.className 和 By.xpath 的比较只给出了一个高级父 ID 和一个 child 的 className

转载 作者:行者123 更新时间:2023-12-03 17:14:08 24 4
gpt4 key购买 nike

免责声明:我浏览了答案 here .但是希望对类似于下面代码的情况有更多的了解。

<div id="feedback-filter-buttons" class="ui-buttonset">
<label class="filter-label ui-button ui-corner-top" for="feedback-all" role="button">
<span class="ui-button-text">Very Good</span>
</label>
<label class="ui-button" role="button">
<span class="ui-button-text"><span > Good </span></span>
</label>
<label class="ui-button" role="button">
<span class="ui-button-text"><span > Alright </span></span>
</label>
<label class="ui-button ui-state-active" role="button">
<span class="ui-button-text"><span > Bad</span></span>
</label>
<label class="ui-button" role="button">
<span class="ui-button-text"><span > Very Bad</span></span>
</label>
<label class="ui-button ui-corner-bottom" role="button">
<span class="ui-button-text"><span > Undefined (0)</span></span>
</label>
</div>

目标:
获取当前选定(即事件)标签(按钮)的文本。

方法:
一) webDriver.findElement(By.id("feedback-filter-buttons")).findElement(By.className("ui-state-active")).getText()
b) webDriver.findElement(By.xpath("//*[@id='feedback-filter-buttons']/label[contains(@class,'ui-state-active')]/span")).getText()
问题:
上述哪种方法更好,为什么?目前,我倾向于 xpath,因为我能够指定路径直到我需要的最终元素。

最佳答案

从性能上看,xpath方法会慢一些,我会选择第一个选项。

对于初学者,您使用 * (未指定实际标签),使其遍历树,进行全页扫描;然后你申请contains() ,这是一个字符串匹配函数。

搜索 By.id()绝对是最快的方法,因为它在后台调用 getElementById()哪些浏览器知道如何优化。另外,您正在快速将搜索范围缩小到父元素,然后按类名在内部进行搜索。

此外,依靠这些idclass属性不仅使您的测试代码可读且易于理解,而且更加明确和健壮。考虑可能的错误:xpath方法,你只会得到它无法使用你给它的 xpath 找到元素 - 没有真正的信息,你甚至不知道从哪里开始调试。如果是 id+class方法,您会看到两种不同类型的错误:“无法通过 id 找到父级”和“无法通过类名找到元素”。

关于selenium - By.id、By.className 和 By.xpath 的比较只给出了一个高级父 ID 和一个 child 的 className,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com