如何定位硒中没有唯一标识符的元素



我在面试中遇到了这样一个问题:如何识别一个没有唯一标识符的网页元素,即使它没有div或select之类的东西。我无法理解这个问题本身。有人能帮我一下吗?

面试问题总是一个挑战,通常是试图从被面试者那里得到一个与问题主题无关的回答(积极的或消极的),这样他们就可以了解你的理解程度或个性。

根据面试官的不同,他们可能想看看你是否在编程方面很全面。我不知道你申请的是什么职位。假设Selenium没有任何"神奇"的方法来找到所述元素,也许面试官想知道你是否会编写或理解编程解析web代码。

也许他们正在寻找您以编程方式量化元素,以便根据参数搜索找到它。

这两个概念都可以向面试官展示你对编程基础的理解,而不必谈论具体的代码。

嗯,有很多不同的技术来定位HTML中的元素。这个问题太宽泛了,很难给出准确的答案,所以,如果我是你,我会用多个例子列出可能的技术。XPath表达式和CSS选择器是用来拯救的。

标签名称,id, name, class或任何其他与数据相关的属性通常是定位元素的良好且可靠的选择。如果这些都不存在,则取决于元素所在的位置,它有什么父元素、兄弟元素、祖先元素等,以及元素文本、相应的标签(如果有的话)、父元素有多独特——太多的变量在起作用。


例如,假设您有以下HTML:
<span>
    <label>Category:</label>
    <b>Desired text</b>
</span>

这里所需的b标记本身没有idname,但是很容易看出,我们可能可以依赖它的前面的兄弟并使用这个XPath表达式:

//label[. = "Category:"]/following-sibling::*
有时我们知道所需的元素位于元素的特定位置。例如:
<tr>
    <td>text1</td>
    <td>Desired text</td>
    <td>text3</td>
</tr>

在这种情况下,我们可以简单地从tr中获得第二个td:

//tr/td[2]

有时,元素的"text"中有一些东西:

<div>The quick brown fox jumps over the lazy dog</div>

假设我们知道"fox"在那里:

//div[contains(., "fox")]

等等

最新更新