【问题标题】:How to wait for img src attribute to change using Selenium and JavaScript?如何使用 Selenium 和 JavaScript 等待 img src 属性发生变化?
【发布时间】:2021-12-31 00:59:04
【问题描述】:

假设我有一个元素:

<div>
 <img src='src1'>
</div>

一段时间后src 更改为其他链接
那么我如何等待它(或一般的任何属性)改变?

可能是这样的:

await driver.wait(until.elementAttributeChanged(el,'src'),3000);

【问题讨论】:

  • 您知道更改为其他链接后的预期值是多少吗?
  • @cruisepandey 不,我不知道新的 src 会是什么
  • 它会改变多次还是只改变一次?
  • @cruisepandey 它可能会更改多次,但如果我能弄清楚在更改一次时如何检测它,我就能弄清楚如何检测多个更改
  • 你知道初始属性值吗?

标签: javascript node.js selenium xpath webdriverwait


【解决方案1】:

要等待&lt;img&gt;src 属性使用Selenium 更改,您可以使用以下until 条件:

  • stalenessOf( element ):创建一个等待给定元素过时的条件。一旦从 DOM 中删除或加载了新页面,就会认为元素已过时。

    let element = await driver.findElement(By.id('elementID'));
    await driver.wait(until.stalenessOf(element),1000);
    

【讨论】:

  • 我对 stale 的定义有点困惑,修改 src 是否会从 DOM 中删除元素?如果是这样,那会结束等待吗?你能详细说明一下这是如何工作的吗?
  • Staleness 表示该元素的先前引用现在已过时,并且该元素引用不再存在于页面的 DOM 上,即(先前的)元素已被 JavaScript 删除或AjaxCall 并被具有相同 ID 或其他属性的(新)元素替换。
  • 等一下,更改属性是否会用新元素替换元素?
  • @cakelover 是的,粗略的
【解决方案2】:

只是为了让 DebanjanB 的回答更准确。
由于我们要指示某个元素的src 属性值的变化,我们可以根据该元素的src 属性值使用定位器。所以代码可以是这样的:

let element = await driver.findElement(By.xpath('//img[@src="src1"]'));
await driver.wait(until.stalenessOf(element),1000);

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2020-09-16
    • 2014-09-09
    相关资源
    最近更新 更多