Webdriver - 等待元素的文本更改

时间:2014-11-14 16:14:06

标签: java selenium

我在应用程序中为元素创建了一个对象。此元素是屏幕上显示的记录的文本。所以在第一页上,它会说“显示2100的1-10”

public static final String VTeam_M_Detail_VRecordsText = "css=#UserList:last-of-type > div:last-child";

当我更改页面时,该元素的文本会发生变化。因此,如果我转到第2页,它将显示“显示2100的11-20”。在继续测试之前,如何让webdriver等待该元素的文本更改。因此,当我从第1页到第2页时,我想等待该元素的文本等于“显示2100的11-20”,然后继续进行剩下的测试。

2 个答案:

答案 0 :(得分:3)

每次在更改页面之前,检索文本,即记录数。然后,单击“下一步”按钮以导航到下一页。然后,等待使用显式等待隐身。

以下代码可能会帮助您:

String retrieved_text = driver.findElement(By.xpath("//xpath of the element related to records")).getText(); //Retrieving text, i.e., the innerHtml representing number of records

/*Click on the next button to navigate to the next page*/
driver.findElement(By.xpath("//next button's xpath")).click();

WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.invisibilityOfElementWithText(By.xpath("//xpath of the element related to records"), retrieved_text)); 

注意:在最后一行代码中使用xpath定位显示文本的元素'显示2100的1-10',即显示每页显示的元素信息并使用检索文本来推断具有该特定文本的相关元素在下一页中是不可见的。

这将有助于轻松识别相关元素的隐身性。

其他方式:如果您想要导航到下一页,直到您检测到某个元素

(把所有事情都放在一个循环中)

  • 等待元素出现在页面中。
  • 如果找到,则编写代码以对元素进行操作并断开循环。
  • 否则,请单击“下一步”按钮
  • 条件将一直到NEXT按钮被禁用。

答案 1 :(得分:0)

我需要做同样的事情,并找到了解决方案。.您可以将 WebDriverWait ExpectedCondition。 not 结合使用,直到文字更改。

WebElement textElement = driver.findElementByCssSelector("#UserList:last-of-type > div:last-child"));
String currentText = textElement.getText();

//poll every .5 seconds for 5 seconds until condition is met
WebDriverWait wait = new WebDriverWait(driver, 5);
//wait until text changes
wait.until(ExpectedConditions.not(ExpectedConditions.textToBePresentInElement(countdownTime,"5:00")));