如何在没有唯一标识符的硒中定位元素?
How to locate element in selenium which has no unique identifier?
我在面试中遇到了以下问题:如何识别没有唯一标识符甚至没有 div 或 select 或其他任何内容的 Web 元素。我无法理解问题本身。有人可以帮我吗?
面试问题始终是一个挑战,通常是试图从受访者那里获得通常与问题主题无关的回答(正面或负面),以便他们了解您的理解水平或个性。
根据面试官的不同,他们可能一直在看你是否在编程方面全面发展。不知道你申请的是什么职位。假设 Selenium 没有任何 'magic' 方法来查找所述元素,也许面试官想知道您是否可以编写或理解以编程方式解析网络代码。
也许他们正在寻找您以编程方式量化元素,以便根据参数搜索找到它。
这两个概念都可以向面试官展示对编程基础知识的理解,而无需谈论具体代码。
嗯,在 HTML 中定位元素的技术有很多种。它的范围太广,无法准确回答,所以,如果我是你,我只会用多个例子列出可能的技术。 XPath 表达式和 CSS 选择器可以派上用场。
标签名称、id
、name
、class
或任何其他与数据相关的属性通常是定位元素的良好且可靠的选择。如果存在 none 个,这将取决于元素的位置、它有哪些父元素、兄弟元素、祖先元素等,以及元素文本、相应标签(如果有)、父元素的独特性——太多了行动中的变量。
例如,假设您有以下 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")]
以此类推
我在面试中遇到了以下问题:如何识别没有唯一标识符甚至没有 div 或 select 或其他任何内容的 Web 元素。我无法理解问题本身。有人可以帮我吗?
面试问题始终是一个挑战,通常是试图从受访者那里获得通常与问题主题无关的回答(正面或负面),以便他们了解您的理解水平或个性。
根据面试官的不同,他们可能一直在看你是否在编程方面全面发展。不知道你申请的是什么职位。假设 Selenium 没有任何 'magic' 方法来查找所述元素,也许面试官想知道您是否可以编写或理解以编程方式解析网络代码。
也许他们正在寻找您以编程方式量化元素,以便根据参数搜索找到它。
这两个概念都可以向面试官展示对编程基础知识的理解,而无需谈论具体代码。
嗯,在 HTML 中定位元素的技术有很多种。它的范围太广,无法准确回答,所以,如果我是你,我只会用多个例子列出可能的技术。 XPath 表达式和 CSS 选择器可以派上用场。
标签名称、id
、name
、class
或任何其他与数据相关的属性通常是定位元素的良好且可靠的选择。如果存在 none 个,这将取决于元素的位置、它有哪些父元素、兄弟元素、祖先元素等,以及元素文本、相应标签(如果有)、父元素的独特性——太多了行动中的变量。
例如,假设您有以下 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")]
以此类推