在我的一个项目中,我必须使用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();
答案 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的中间状态。这样可以更轻松地确定正在发生的事情并找到相关的定位器。