java - Selenium webdriver 在页面更改后获取元素

标签 java selenium css-selectors webdriver

非常简单的问题,基本上我试图在单击另一个链接后获取 li 元素的文本。该链接将导致 li 命令更改。每当我尝试获取文本时,它都会在订单更改之前返回文本。单击链接更改订单后如何获取 li 文本?该链接不会重新加载页面本身。

这是我用来获取元素的内容:

driver.findElement(By.cssSelector("li[id^='coupon_']:nth-of-type(1) p.brand")).getText();

更改本身将来自:

<div id="id1">
  <ul class="pods">
    <li rel="" title="some text" id="coupon_1" data-pos="1">
      ...
      <p class="brand">brand1</p>
      ...
    </li>
  </ul>
</div>

到:

<div id="id1">
  <ul class="pods">
    <li rel="" title="some text" id="coupon_5" data-pos="1">
      ...
      <p class="brand">brand5</p>
      ...
    </li>
  </ul>
</div>

我有类似的情况,我会使用 wait.until 来让发生变化的元素出现然后获取它,但在这种情况下,li 元素已经存在,但只是在单击链接后发生变化。我怎样才能得到新的元素文本?谢谢!

最佳答案

你可以在li

中等待id的变化
WebDriverWait wait = new WebDriverWait(driver, 10);
// wait for the new li to appear
WebElement li = wait.until(ExpectedConditions.elementToBeClickable(By.id("coupon_5")));
System.out.println(li.findElement(By.cssSelector("p.brand")).getText().trim());

或者如果新 id 有多种可能性,那么您可以等待旧 id 元素变得陈旧。

// get the original li that will be changed
WebElement oldLi = driver.findElement(By.id("coupon_1"));
WebDriverWait wait = new WebDriverWait(driver, 10);
// wait for the original li to go stale... change
wait.until(ExpectedConditions.stalenessOf(oldLi));
// grab the new element by whatever the new id is
WebElement newLi = driver.findElement(By.id("coupon_5"));
System.out.println(newLi.findElement(By.cssSelector("p.brand")).getText().trim());

关于java - Selenium webdriver 在页面更改后获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32408188/

相关文章:

同步、 volatile 和(标记)锁的 Java 内存模型交互

Python与selenium webscraping无法找到元素

c# - 如何使用运行时发生变化的 WebElement?

python - 循环单击表中的 anchor 标记,但使用 css 选择器 python selenium

java - 用 Java 实现维基百科就地快速排序伪代码

java - Spring Boot autoconfig 仍在使用 Tomcat 数据源而不是 HikariCP?

java - 我可以在 Java 的构造函数中调用方法吗?

selenium - 如何在 Selenium 中按 shift + ctrl + s

css - 在 * 上应用 "reset"样式

css - 具有可选属性的自定义指令的 Angular css 选择器