WebDriver waitAndFind 相关
被 JavaScript 的 Promise 折磨了两三天后,终于有所收获,故此记录
实现在 Selenium WebDriver 中,封装一个实用函数,同时 wait until located & visible 并返回 the fisrt visible element,并保持 thenable,极大兼容性了
1 | driver.find = function (locator, timeout = 30000) { |
NOTE
- find() 并不是一个 async function,不然返回的是一个 Promise,需要进一步 await,无法 then 链式
- 使用 findElement() 替我们返回了一个 WebElementPromise,WebElementPromise 才有 then(),才能 thenable [1]
- Promise.any() 是个好东西,但方法依然是实验性的,尚未被所有的浏览器完全支持。它当前处于 TC39 第四阶段草案 [2],希望正式了之后能在 selenium-webdriver/lib/promise.js [3] 中封装一个 promise.any()
- wait until 好像只能在这里,没有 async function 不能用 await,也不能在执行的时候它还是个 Promise {
}
XXX
JavaScript 的 async, promise, await 快赶上 C 的指针了,真的头大
https://github.com/SeleniumHQ/selenium/blob/944aad294d14a13345ebaf0e64df3aa68218521f/javascript/node/selenium-webdriver/lib/webdriver.js#L2402 ↩︎
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/any ↩︎
https://github.com/SeleniumHQ/selenium/blob/944aad294d14a13345ebaf0e64df3aa68218521f/javascript/node/selenium-webdriver/lib/promise.js ↩︎