Webdriverjs没有休眠语句,陈旧的元素引用
Webdriverjs no sleep statements stale element reference
我有以下代码块,使用动作序列执行以下操作:
- 点击页面链接
- 等待页面上的输入字段出现
- 点击输入字段
- 删除所有存在的文本
- 发送一个键序列以进入一个位置
- 点击向下箭头(输入使用自动完成)
- 按回车键选择正确的位置
- 点击保存按钮
我读到不建议使用driver.sleep()
语句,但如果没有它们,我无法使代码正常工作。
下面是代码块:
driver.wait(until.elementLocated(By.css("a[href*='details/location']")), 5000)
driver.findElement(By.css("a[href*='details/location']")).click()
driver.wait(until.elementLocated(By.id("user_location")), 5000)
let loc = driver.findElement(By.id("user_location"))
let save = driver.findElement(By.xpath("//span[contains(text(), 'Save')]"))
driver.sleep(3000)
driver.actions().
click(loc).
sendKeys(Key.DELETE)
.sendKeys('My location')
.perform()
driver.sleep(1000)
driver.actions().
sendKeys(Key.ARROW_DOWN).
sendKeys(Key.ENTER).
perform()
driver.sleep(1000)
driver.actions().
click(save).
perform()
是否有更好的方法去做这件事和/或有一种方法来删除sleep语句?为什么当我取出sleep语句时,会发生stale element
错误?
一个问题可能是从抓取loc
和save
页面到实际使用它们之间的时间。试着像下面这样重新排列代码,看看是否有帮助。
我注意到的另一件事,driver.wait()
返回等待的元素,所以你可以组合行1 &第2行和第3行&这样你就不用刮两次了。
driver.wait(until.elementLocated(By.css("a[href*='details/location']")), 5000).click()
let loc = driver.wait(until.elementLocated(By.id("user_location")), 5000)
# driver.sleep(3000) # you shouldn't need this sleep?
driver.actions()
.click(loc)
.sendKeys(Key.DELETE)
.sendKeys('My location')
.perform()
driver.sleep(1000)
driver.actions()
.sendKeys(Key.ARROW_DOWN)
.sendKeys(Key.ENTER)
.perform()
driver.sleep(1000)
let save = driver.findElement(By.xpath("//span[contains(text(), 'Save')]"))
driver.actions()
.click(save)
.perform()
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- GhostDriver 在现有元素上执行 javascript 时引发陈旧异常“元素在缓存中不存在”
- Webdriverjs没有休眠语句,陈旧的元素引用