如何在selenium中找到没有唯一标识符的元素?

时间:2015-09-27 19:39:24

标签: html selenium selenium-webdriver html-parsing

我在采访中遇到了以下问题:如何识别没有唯一标识符的网络元素,甚至没有div或select或任何东西。我无法理解这个问题本身。谁能在这帮助我?

2 个答案:

答案 0 :(得分:2)

面试问题总是一个挑战,通常是试图通过受访者的反应(正面或负面),这通常与问题的主题无关,这样他们就可以了解你的问题。理解或个性。

根据采访者的不同,他们可能一直在寻找你是否在编程方面做得很好。我不知道你申请的职位。假设Selenium没有任何“魔法”方法来查找所述元素,那么面试官可能想知道你是否可以编写,或者理解以编程方式解析网页代码。

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

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

答案 1 :(得分:2)

嗯,有很多不同的技术可以在HTML中找到元素。它过于宽泛而无法准确回答,因此,如果我是你,我会列出可能的技术,并提供多个示例。 XPath表达式和CSS选择器可以解决问题。

标记名称,idnameclass或任何其他与数据相关的属性通常是定位元素的良好可靠选择。如果这些都不存在,那将取决于元素的位置,父母,兄弟姐妹,祖先等所具有的内容以及元素文本,相应标签(如果有的话),父母的独特性 - 实际上有太多变量。

例如,假设您有以下HTML:

<span>
    <label>Category:</label>
    <b>Desired text</b>
</span>

此处所需的b标记本身没有idname,但很容易看出我们可能依赖其前一个兄弟< / em>并使用此XPath表达式:

//label[. = "Category:"]/following-sibling::*

有时我们知道所需元素位于元素中的特定位置。例如:

<tr>
    <td>text1</td>
    <td>Desired text</td>
    <td>text3</td>
</tr>

在这种情况下,我们只需从td获取第二个tr

//tr/td[2]

有时,&#34; text&#34;元素:

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

让我们知道&#34; fox&#34;在那里:

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

等等。