Java 元素的Webdriver getText()返回空白

Java 元素的Webdriver getText()返回空白,java,selenium,selenium-webdriver,webdriver,webdriverwait,Java,Selenium,Selenium Webdriver,Webdriver,Webdriverwait,我有一个动态数的元素。它是在每次订单后生成的唯一订单号。我试图使用getText()方法从段落中获取该数字,标记,但webdriver在测试运行后返回一个空白文本 执行: boolean a = driver.findElement(By.xpath("(.//*[@id='alert-message']/div/p/strong)[1]")).isDisplayed(); 返回false,表示未显示元素 这是HTML: <div class="ng-scope" ng-include=

我有一个动态数的元素。它是在每次订单后生成的唯一订单号。我试图使用getText()方法从段落中获取该数字,
标记,但webdriver在测试运行后返回一个空白文本

执行:

boolean a = driver.findElement(By.xpath("(.//*[@id='alert-message']/div/p/strong)[1]")).isDisplayed();
返回false,表示未显示元素

这是HTML:

<div class="ng-scope" ng-include="templates[step]">
<div class="ng-scope" ng-controller="wReviewCtrl">
<div class="panel-alert ng-hide" ng-show="success<0">
<div class="panel-alert" ng-show="success>0 && hasRole('BUYER')">
<div class="alert-wrap in">
<div id="alert-message" class="alert alert-success" role="alert">
<div class="media">
<strong>Done!</strong>
<p>
A new order with Number
<strong class="ng-binding">JJ-MD000-12345</strong>  //Order number
 was generated. The order is now complete.
</p>
</div>
</div>
</div>
</div>
<div class="panel-alert ng-hide" ng-show="success>0 && hasRole('SELLER')">
<div class="alert-wrap in">
<div id="alert-message" class="alert alert-success" role="alert">
<div class="media">
<strong>Done!</strong>
<p>
我尝试了各种替代组合,而不是
.getText()
,包括:

.getAttribute("textContent");
.getAttribute("innerHTML");
.getAttribute("value");  //retuns NULL value
.getAttribute("outerText");
但没有一个成功。如何在HTML中获取订单号

把所有的文本都放在p标签上是可行的,我得到了一个 输出:“生成了编号为JJ-MD000-12345的新订单 我的目的是只获取订单号 这个是返回空白的。有什么想法吗

如果订单号是动态的,我建议如下:

String s = "A new order with Number JJ-MD000-12345 was generated. The order is now complete."; // is the string, which you are getting from 'p' tag
String[] parts = s.split(" "); // split this string to parts
String output = parts[5]; // choose the part with your order number
System.out.println(output); // JJ-MD000-12345

根据您共享的HTML,所需元素是一个角度元素,因此您可以在ExpectedConditions设置为的情况下诱导WebDriverWait,然后根据以下代码块提取/打印动态值

new WebDriverWait(driver, 20).until(ExpectedConditions.attributeToBeNotEmpty(driver.findElement(By.xpath("//div[@class='alert alert-success' and @id='alert-message']/div[@class='media']//p//strong[@class='ng-binding']")), "innerHTML"));
System.out.println(driver.findElement(By.xpath("//div[@class='alert alert-success' and @id='alert-message']/div[@class='media']//p//strong[@class='ng-binding']")).getAttribute("innerHTML"));

考虑使用显式等待并检查元素是否可见。弹出窗口打开后,您将尝试在angular有机会更新绑定之前访问文本。因此,您将获得空文本。

尝试获取p的innerHTML属性,并查看html是否具有所需的值。您可能正在尝试在angular更新绑定之前从中读取值。您可以通过添加10-15秒的延迟来验证这一点。如果它有效,您可以考虑使用一种更好的方法,如具有可视性条件的WebDevor的显式等待条件(应该是真的)。谢谢,@ NISH26。获取p标签中的全部文本确实有效,我得到的输出是:“生成了编号为JJ-MD000-12345的新订单。订单现在已完成。”我的目的是只获取订单号,而这是返回空白的订单号。有什么想法吗?@Nish,我破解了它,你的提示导致了这个决议。显式等待条件有效。如果你把答案放在答案框里,我可以把它标记为正式答案。谢谢
new WebDriverWait(driver, 20).until(ExpectedConditions.attributeToBeNotEmpty(driver.findElement(By.xpath("//div[@class='alert alert-success' and @id='alert-message']/div[@class='media']//p//strong[@class='ng-binding']")), "innerHTML"));
System.out.println(driver.findElement(By.xpath("//div[@class='alert alert-success' and @id='alert-message']/div[@class='media']//p//strong[@class='ng-binding']")).getAttribute("innerHTML"));