Java 使用selenium查找动态文本

Java 使用selenium查找动态文本,java,selenium-webdriver,Java,Selenium Webdriver,我有一个网页,可以动态地在一个跨度中放置文本。有点像: <table id=table_1> <td> <span> $available/$total <span><label id=label_1>Servers available</label> </td> </table> 我需要${availWorkerCount},${totalWorkerCount}和${queueW

我有一个网页,可以动态地在一个跨度中放置文本。有点像:

<table id=table_1>
  <td>
    <span> $available/$total <span><label id=label_1>Servers available</label>
  </td>
</table>

我需要
${availWorkerCount}
${totalWorkerCount}
${queueWaitingTime}

使用WebDriver在页面加载完成后从页面中拾取文本。因此,获得这种“动态”文本不会是一个问题。您的示例仅在服务器端是动态的,在客户端,来自这些变量的文本将是静态内容,并且与任何其他文本一样容易从页面中获取

我建议您将
id
属性添加到您要查找的
,然后使用Selenium获取其内容就非常简单了

例如:

<span id="myStuff">foobar</span>
*编辑*

因为您无法更改原始代码,所以这里有一个很难做到的方法:

By qwt = By.xpath("//label[@id = 'Wait_time _message_1stpart_l']/parent::td/text()[2]");
By wc = By.xpath("//label[@id = 'Progress_message_l']/parent::span/text()[1]");

String queueWaitingTime = driver.findElement(qwt).getText();
String[] workerCounts = driver.findElement(wc).getText().split(" / ");
String availWorkerCount = workerCounts[0];
String totalWorkerCount = workerCounts[1];

我有个主意。请遵循以下步骤可能对您有用,此答案来自HTML。我不知道你说的是什么意思

I need ${availWorkerCount} , ${totalWorkerCount} and ${queueWaitingTime}
步骤后的完整示例代码。我要说的是,我还没有运行这段代码

1.按文本搜索元素标签

label[contains(.,'Servers available')]
您也可以添加id检查,如

label[contains(@id,'label_1') and contains(.,'Servers available')]
2.获取标签,然后获取平行元素跨度。Span应该具有该值

代码:

List<WebElement> elements = driver.findElements(By.xpath("label[contains(@id,'label_1') and contains(.,'Servers available')]");
for(// now loop over the elements)
{
  WebElement elem = elements.get(0);
  List<WebElement> spanelems = elem.findElements(By.xpath("../span"));
  spanelems.get(0).getText() // this should give you the data under the span
}
List elements=driver.findElements(By.xpath(“label[contains(@id,'label_1'))和contains(,'Servers available'));
for(//现在在元素上循环)
{
WebElement elem=elements.get(0);
List spanelems=elem.findElements(By.xpath(“../span”);
spanelems.get(0.getText()//这将为您提供span下的数据
}

如果x和y是从表单传递的参数,则可以使用request.getParameter(),如果它在会话中,则可以使用sess.getAttribute()。您的问题不完整。请提供更多详细信息。它们是使用java脚本变量传递的。代码如何传递它们?谢谢。但我无法更改原始代码,因为它是一个客户端代码$available/$total-它们是正确的标记,在创建html时将对它们进行计算并打印值。您希望该值正确吗?@shruti:好的,经过编辑的答案反映了如何从未更改的源中提取它们。
label[contains(@id,'label_1') and contains(.,'Servers available')]
List<WebElement> elements = driver.findElements(By.xpath("label[contains(@id,'label_1') and contains(.,'Servers available')]");
for(// now loop over the elements)
{
  WebElement elem = elements.get(0);
  List<WebElement> spanelems = elem.findElements(By.xpath("../span"));
  spanelems.get(0).getText() // this should give you the data under the span
}