使用xpath找不到元素

时间:2013-08-07 07:08:53

标签: webdriver selenium-webdriver

所以,这里有两个div

<div class="th_pr"><input id="user_email" class="accounts_input" type="text" size="30" placeholder="Email" name="user[email]"></input><p class="accounts_error_text" style="display: block;">
  email is invalid
</p></div>
<div class="th_pr"><input id="user_password" class="accounts_input" type="password" size="30" placeholder="Password" name="user[password]" autocomplete="off"></input><p class="accounts_error_text" style="display: block;">
  password can't be blank
</p></div>

我需要通过文本获取文本“电子邮件无效”和“密码不能为空”的元素,因为它会因输入而异。

我一直在尝试使用xpath完成此操作:

By.xpath("//p[contains(.,'email is invalid')]")

By.xpath("//p[contains(.,'password be blank')]")

但我一无所获。

resultEmail = ExpectedConditions.invisibilityOfElementLocated(By.xpath("//p[contains(.,'email is invalid')]")).apply(driver);

返回true,尽管元素可见。

请帮忙。

3 个答案:

答案 0 :(得分:1)

试试xpath

//input[@id='user_email']/following-sibling::p
//input[@id='user_password']/following-sibling::p

然后你有

WebElement emailParagraph = driver.findElement(By.xpath("//input[@id='user_email']/following-sibling::p"));
System.out.println(emailParagraph.getText());

答案 1 :(得分:0)

您是否尝试在xpath中使用text()方法?

driver.findElement(By.xpath("//p[contains(text(), 'email is invalid')]"));

而不是使用.

答案 2 :(得分:0)

请试试这个:

WebElement userEmailErrorMessage = driver.findElement(By.cssSelector("div[class=\"th_pr\"]:nth-child(1) > p"));

WebElement userPasswordErrorMessage = driver.findElement(By.cssSelector("div[class=\"th_pr\"]:nth-child(2) > p"));


使用这些元素,您将能够读取相应输入控件的错误消息。