在Ant Design中获取“成功文本”警报消息并使用Selenium进行验证

时间:2019-06-24 05:35:33

标签: java selenium xpath css-selectors webdriverwait

在我的一个项目中,我必须使用Selenium验证成功警报文本。该UI在遵循Ant设计的React JS中进行了编码。要进行验证,请点击此链接“ https://ant.design/components/message/”,然后点击“显示正常”消息。该消息显示在页面顶部的上方,但我无法使用Core Java中的Selenium Webdriver编码从中获取文本。请帮忙。

我尝试了以下代码:

driver.findElement(By.cssSelector(".ant-btn-primary")).click();
            WebDriverWait wait = new WebDriverWait(driver, 60);
            WebElement successmessage = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("ant-message-custom-content-ant-message-success")));
            successmessage.getText();

3 个答案:

答案 0 :(得分:1)

要提取文本这是一条正常消息,您需要为visibilityOfElementLocated()引入 WebDriverWait ,并且可以使用以下{{3} }:

  • cssSelector

    driver.get("https://ant.design/components/message/");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.ant-btn.ant-btn-primary"))).click();
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.ant-message"))).getText());
    
  • xpath

    driver.get("https://ant.design/components/message/");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='ant-btn ant-btn-primary']"))).click();
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='ant-message']"))).getText());
    
  • 控制台输出:

    This is a normal message
    

答案 1 :(得分:0)

driver.findElement(By.cssSelector(".ant-btn-primary")).click();
WebElement alertElmt = driver.findElement(By.xpath("//*[@class='ant-message']"));

for(int i=1; i<10; i++) {
    Thread.sleep(500);
    String getText = alertElmt.getText();
    if(!getText.equals("")) {
        System.out.println(getText);
        break;
    }
}

//or with webdriverwait
driver.findElement(By.cssSelector(".ant-btn-primary")).click();
WebElement alert = new WebDriverWait(driver,20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='ant-message']")));
System.out.println(alert.getText());

答案 2 :(得分:0)

我将建议:

driver.findElement(By.cssSelector(".ant-btn-primary")).click();
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
String successMessage = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".ant-message-info > span"))).getText();

您遇到的主要问题是消息不会持续很长时间,因此您需要在破坏之前迅速从中取出数据。结果,我内联了getText()调用,以便在找到该元素后立即对其进行调用。

我怀疑您的问题的一部分是找到了准确的定位器。通过打开chrome dev控制台,选择在其中创建通知消息的父元素,然后右键单击该元素并选择break on-> subtree modifications,可以使操作变得更加容易。通过暂停消息创建时的JavaScript执行,您可以查看DOM的中间状态。这样可以更轻松地确定正在发生的事情并找到相关的定位器。