Selenium如何点击并按住按钮

3
在网页中,我测试的是一个模态框,它会在按下按钮约5秒后出现。
现在我正在尝试在Selenium中实现这个功能。 我的方法如下:
public static void ClickHold(IWebElement by)
{
    SpecialInteractions.ClickAndHold(by);
}

where

public static Actions SpecialInteractions { get; set; }

而且没有需要设置的等待时间。

看起来只需点击一下即可释放。是否有一种方法可以等待特定的时间然后再释放?


如果是悬停状态,那么您可以像悬停在元素上一样操作,然后使用thread.sleep()函数等待指定的秒数。 - Helping Hands
不幸的是它不是在悬停状态下。用户需要点击并保持。 - szpic
点击后它会改变页面吗? - Helping Hands
是的,当点击并按住时,它会显示模态框。 - szpic
我可以拿到您正在尝试的URL吗? - Helping Hands
不,这个页面没有部署在任何网站上。它非常复杂,即使尝试将其粘贴到类似于jsfiddle的地方也是不可能的。 - szpic
2个回答

5

不用深入挖掘,我可以告诉您上面的程序可能会返回NulReference exception。我怀疑您需要通过包装当前的驱动程序实例来实例化Actions

可能的解决方案是:

public void ClickHold(IWebElement element)
{
    Actions action = new Actions(driver);
    action.clickAndHold(webelement).build().perform();
    //you need to release the control from the test
    //actions.MoveToElement(element).Release();
}

非常抱歉我复制得太少了。操作当然是使用驱动程序实例化的。没有NullPointerException。这段代码只是在保持和释放之后立即结束,因为没有时间设置。 - szpic
你尝试过在 hold 后加入一些睡眠时间,再使用 Release() 方法吗? - Saifur
@匿名的点踩者 请指明点踩的原因。并且,说明我做错或遗漏了什么。 - Saifur
1
Actions action = new Actions(driver); action.clickAndHold(webelement).build().perform(); 将这段代码添加到你的答案中以使其正常工作。 - Pankaj Kumar Katiyar
我们如何在JS中实现这个? - Zeeshan Ahmad Khalil

1
请记住,如果您正在使用Selenium Grid,则此方法无法正常工作。这是一个错误,使moveToElement成为未识别的命令。
public static Boolean moveToThenSlowClickElement(final WebDriver driver, final WebElement toElement, final int millisecondsOfWaitTime) {
        final Actions clickOnElementAndHold = new Actions(driver);
        final Actions release = new Actions(driver);
        clickOnElementAndHold.moveToElement(toElement).clickAndHold(toElement).perform();

        sleep(millisecondsOfWaitTime);

        release.release(toElement).perform();

        final Action hoverOverCheckBox = clickOnElementAndHold.build();
        hoverOverCheckBox.perform();

        return true;
    }

我在使用docker selenium grid的moveToElement时遇到了同样的问题,但是最新版本已经修复了这个问题。对我来说,这只是针对Firefox/gecko的。 3.4.0版本有FF-55.0和gecko 0.18.0 - 这是一个不好的组合,对于moveToElement来说不起作用,而最新版本有FF 59.0.1和gecko 0.20.1 - 是一个好的组合!注意:虽然我已经让moveToElement在悬停测试中工作了,但我发现它在dragAndDrop中不起作用 - 这个问题为什么会存在这么长时间? - mancocapac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接