如何在 <p><div> 中定位两个相似的

问题描述 投票:0回答:2

我找不到电子邮件和密码的

err_message
元素。我收到一个错误:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"body > div:nth-child(1) > div:nth-child(4) > form:nth-child(2) > div:nth-child(1) > p:nth-child(3)"}

试过:

.form-signin .form_item .err_message:nth-child(1), .err_message:nth-of-type(1)

HTML 快照:

enter image description here

java selenium-webdriver css-selectors nosuchelementexception selenium-java
2个回答
0
投票

一个从 body 元素开始并使用

>
来识别每个后代直到目标的 CSS 选择器,正如您所做的那样,不是 一个好主意,因为一旦您在文档中移动内容,选择器将中断。相反,使用类或 id 直接定位元素。

在您的情况下,代码中唯一的 id 在输入字段上,因此您可以将它们与 adjacent sibling combinator 结合使用以定位错误消息元素:

电子邮件字段的错误消息可以选择以下任何一项:

  • #email + p
  • #email + .err_message
  • #email + p.err_message

密码字段的错误消息可以选择以下任何一项:

  • #password + p
  • #password + .err_message
  • #password + p.err_message

0
投票

要找到

<p>
元素,您可以使用 Email AddressPassword 字段作为通过唯一属性识别的参考,您可以使用以下 css_selector

  • <p>
    电子邮件地址 字段的标签:

    WebElement element = driver.findElement(By.cssSelector("div.login_page form.form-signin div.form_item input#email +p"));
    
  • <p>
    密码 字段的标签:

    WebElement element = driver.findElement(By.cssSelector("div.login_page form.form-signin div.form_item input#password +p"));
    
© www.soinside.com 2019 - 2024. All rights reserved.