Java 无法使用XPath定位嵌套文本

Java 无法使用XPath定位嵌套文本,java,selenium,xpath,css-selectors,webdriverwait,Java,Selenium,Xpath,Css Selectors,Webdriverwait,我是自动化新手,正在尝试测试一个不成功的登录。输入错误密码时,网站上会显示一个错误弹出窗口。我正在尝试编写一个测试来确认显示的错误文本 代码试用: @Test public void IncorrectPasswordMessage() { boolean b=driver.findElement(By.xpath("//*[@id=\"errors\"]/h2")).isDisplayed(); Assert.a

我是自动化新手,正在尝试测试一个不成功的登录。输入错误密码时,网站上会显示一个错误弹出窗口。我正在尝试编写一个测试来确认显示的错误文本

代码试用:

@Test
    public void IncorrectPasswordMessage() {

        boolean b=driver.findElement(By.xpath("//*[@id=\"errors\"]/h2")).isDisplayed();
        Assert.assertTrue(b);

    }
下面是HTML。如何更改脚本以确认网页上显示的嵌套文本“存在以下错误”

<form id="login_form" action="/cs/form/customer-login" method="AJAX" class="cforms pad-top1 span6">
    <!--|cid=1400679170853|type=Forms_P|-->
    <div id="errors" style="">
        <h2>There are the following errors.</h2>
        <ul><li>The number and password you have entered do not match. Please enter it again.</li></ul>
    </div>
    <input type="hidden" name="_form_url" value="">
    <input type="hidden" name="_success_url" value="">
    <input type="hidden" name="_failure_url" value="">
</form>

有以下错误。
  • 您输入的号码和密码不匹配。请重新输入。
该元素是一个元素,因此要
单击所需元素上的()
,以获得
元素定位的可见性()
,您可以使用以下任一选项:

  • CSS选择器:

  • xpath:


根据您的
Assert.assertTrue()
我已将
javascript
标记替换为
java
标记。如果变化看起来不错,请告诉我。谢谢您的快速回复。我尝试了两种定位器策略,但它返回“预期条件失败:等待by.cssSelector:div#errors>h2定位元素的可见性(以500毫秒的间隔尝试20秒)”。在添加定位器策略时,Eclipse会突出显示一个错误:“类型不匹配:不能从WebLeEnter转换成布尔”,并且我已经尝试了这两种修复方法。@ MichaelD在代码中有一个错误,作为代码的预期条件。VisualBIILITIONEXIT 将始终返回元素,而不能将其视为布尔值。更新了答案。
@Test
    public void IncorrectPasswordMessage() {
        WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div#errors>h2")));
        // lines of code
        Assert.assertTrue(b);
    }
@Test
    public void IncorrectPasswordMessage() {
        WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='errors']/h2")));
        // lines of code
        Assert.assertTrue(b);
    }