我在面试中遇到了这样一个问题:如何识别一个没有唯一标识符的网页元素,即使它没有div或select之类的东西。我无法理解这个问题本身。有人能帮我一下吗?
面试问题总是一个挑战,通常是试图从被面试者那里得到一个与问题主题无关的回答(积极的或消极的),这样他们就可以了解你的理解程度或个性。
根据面试官的不同,他们可能想看看你是否在编程方面很全面。我不知道你申请的是什么职位。假设Selenium没有任何"神奇"的方法来找到所述元素,也许面试官想知道你是否会编写或理解编程解析web代码。
也许他们正在寻找您以编程方式量化元素,以便根据参数搜索找到它。
这两个概念都可以向面试官展示你对编程基础的理解,而不必谈论具体的代码。
嗯,有很多不同的技术来定位HTML中的元素。这个问题太宽泛了,很难给出准确的答案,所以,如果我是你,我会用多个例子列出可能的技术。XPath表达式和CSS选择器是用来拯救的。
标签名称,id
, name
, class
或任何其他与数据相关的属性通常是定位元素的良好且可靠的选择。如果这些都不存在,则取决于元素所在的位置,它有什么父元素、兄弟元素、祖先元素等,以及元素文本、相应的标签(如果有的话)、父元素有多独特——太多的变量在起作用。
例如,假设您有以下HTML:
<span>
<label>Category:</label>
<b>Desired text</b>
</span>
这里所需的b
标记本身没有id
或name
,但是很容易看出,我们可能可以依赖它的前面的兄弟并使用这个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")]
等等