使用 Selenium Webdriver 的 Python 绑定,我无法使用ActionChains.drag_and_drop()
. (它确实适用于一个简单的示例。)
我的测试表明它release(target)
失败了,而不是click_and_hold(source)
. 我的问题的 PasteBin 示例可在此处获得。
当事情在 WebDriver 中不起作用时,我感到有些无能为力。我应该如何调试这个?
使用 Selenium Webdriver 的 Python 绑定,我无法使用ActionChains.drag_and_drop()
. (它确实适用于一个简单的示例。)
我的测试表明它release(target)
失败了,而不是click_and_hold(source)
. 我的问题的 PasteBin 示例可在此处获得。
当事情在 WebDriver 中不起作用时,我感到有些无能为力。我应该如何调试这个?
如果是 ChromeDriver,我也有同样的问题。原来你必须在两者之间插入一个虚拟拖动操作,如下所示:
Actions builder = new Actions(GuiOps.driver);
// Click and hold fromElem
builder = builder.ClickAndHold(fromElem);
// If this is Chrome, insert a tiny move-by-offset call.
// See http://code.google.com/p/chromium/issues/detail?id=92312 for more details.
if (driver is OpenQA.Selenium.Chrome.ChromeDriver)
{
builder = builder.MoveByOffset(1, 1);
}
// Then move to the target and release:
builder.MoveToElement(toElem, offsetX, offsetY).Release().Build().Perform();
我看到你正在使用 chromeDriver。还有更多未解决的问题:“Drag-and-drop with ChromeDriver”,“Python Selenium WebDriver drag-and-drop”所以如果你找不到问题,也许此时它无法解决,那么我建议尝试使用不同的浏览器运行测试。
与往常一样,您应该 100% 确定drag_and_drop
您为方法提供了正确的参数。我看到你检查能见度,但为了确保我推荐两件事:
sleep(15)
之前actionChains.drag_and_drop
。我仅将 sleep 方法用于调试目的。如果它适用于长时间睡眠,则意味着 waitForElement 或 waitForPageLoad 等方法的实现不正确(需要改进)。drag_and_drop
在将源和目标对象用作参数之前,在控制台中打印出有关源和目标对象的信息。尝试打印出标签 name、id、class或确保使用正确元素的东西。您提到了基于 Web 应用程序的基于 UI 的复杂 jQuery 方法,这意味着它可以具有诸如在鼠标悬停时更改 DIV 背景之类的功能。它甚至可以更改 DIV 元素类名称、大小或其他 css 属性,这些属性会使您的drag_and_drop
目标对象与开始拖动它之前不同。您可以尝试调试鼠标悬停时目标元素发生的情况,move_to_element
打印出有关 mouse_on_target 元素对象的信息,并与 target_before_mouse_on 对象进行比较。即使对象 mouse_on_target 没有更改父元素上的某些内容也可以更改。InvalidElementStateException
在这种情况下,当我尝试使用此类元素时,Java 会引发特殊异常。但是我不知道python在提到的情况下如何反应。您可以尝试使用手动输入目标坐标进行测试drag_and_drop_by_offset
(参见文档)。使用这种方法,您至少会知道它在哪个位置尝试发布目标。