python - 当所需元素尚不存在时,Selenium ActionChains

标签 python selenium selenium-webdriver

如果在操作链开始执行之前所需元素之一不存在,是否可以在 selenium 中创建操作链?

例如,我正在尝试在 selenium 中执行拖放操作。问题是放置的目标仅在发生拖动时才存在。拖放的直观解决方案似乎正在做:

source = driver.find_element(...)
target = driver.find_element(...)
ActionChains(driver).drag_and_drop(source, target)

这将不起作用,因为在拖动开始之前目标并不存在。

我尝试过做一些事情:

source = driver.find_element(...)
drag_and_drop = ActionChains(driver)
drag_and_drop.click_and_hold(source)
drag_and_drop.move_by_offset(10, 10)
drag_and_drop.perform()

target = driver.find_element(...)
drag_and_drop.move_to_element(target)
drag_and_drop.release()
drag_and_drop.perform()

这也行不通。似乎第一次执行后鼠标被释放,这会导致目标消失。这似乎表明需要一个带有单个 perform() 调用的单个操作链。我尝试研究是否有任何方法可以在需要操作链的步骤时延迟查找元素,但我找不到任何方法来做到这一点。

有什么方法可以在 Selenium 中实现类似的功能吗?

最佳答案

这实际上是一个误诊问题的案例。根本问题实际上在于 selenium 目前不支持原生 HTML5 拖放,这在 this answer 中有更好的解释。 。因此,无论所需元素是否存在,给出的两个示例都无法达到此目的,即使它们看起来应该如此。

由于操作链开头不存在该元素的问题,解决方案实际上是将其分成多个部分,并使用多个 perform() 调用,如第二个示例所示。同样,在多次 perform() 调用不起作用的问题中得出的结论是不准确的,并且是误解真正问题的结果。

关于python - 当所需元素尚不存在时,Selenium ActionChains,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637521/

相关文章:

PHPUnit_Selenium : Don't throw exceptions if element not found?

python - 为什么 range 在 python "stop short"中?

python - 是否有适用于纽约 mta 地铁/公共(public)汽车/火车等的 api?

python - 我们如何在循环中创建 selenium webdriver 对象并在循环结束后关闭窗口?

c# - Selenium 测试失败时捕获错误消息

javascript - 如何将 Selenium 用于桌面应用程序?

python - PyTorch 中多输出回归问题的 RMSE 损失

python - Django 休息框架 "A valid integer is required."?

java - Selenium 'browserName was not a boolean' InvalidArgumentException,无法解决

Java 和 Selenium 显示 Google 搜索结果的最佳方式