硒悬停代码在Chrome而非Edge中有效

问题描述 投票:0回答:2
public void Hover()
{
    Actions action = new Actions(BrowserWindow.Instance.Driver);
    action.MoveToElement(WebElement).Perform();
}

这在Chrome浏览器中有效。不是边缘。我已与开发人员确认,我正在“悬停”在正确的元素上。

WebElement elem = yourWebDriverInstance.findElement(By.xpath("//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input"));
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";

((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem);

这也没有工作。有人知道我在做什么错吗?

更多信息。

这在Firefox上也失败。我看到了一篇有关硒驱动器过期的文章。我只安装了geckodriver并根据文档将Edge驱动程序设置为自动更新。我不认为我有过时的驱动程序。

更多信息需要2

呼叫代码是

public static void DoCloseActiveTabEntire()
{
    Element tab = new Element(byTab);
    tab.Hover();

    // CLose button is not clickable. Cannot use standard BUTTON for find
    Button close = new Button(byClosePanelButton);
    close.Click();
}

如果在悬停尝试后在按钮关闭处设置了一个断点...,我会注意到将鼠标移到“选项卡”上也不会导致按钮可见。

java selenium selenium-webdriver webdriver action
2个回答
1
投票

嗯。真奇怪但是更换action.MoveToElement(WebElement).Perform();与action.MoveToElement(WebElement).Build()。Perform();而且有效。我读过,Build是内置在Perform中的。但是我有点sm之以鼻,希望有什么事情发生。而且有效。


0
投票

perform()

perform()是无需先调用build()就执行操作的便捷方法。


build()

[build()生成一个复合动作,其中包含到目前为止所有准备执行的动作,此外还会重置内部构建器状态,因此对build()的后续调用将包含新序列。


此用例

在您的用例中,您仅在perform()之后调用了moveToElement(WebElement),而没有生成要使用build()执行的复合操作。


解决方案

一个直接的解决方案是在build()之前按如下方式调用perform()

public void Hover()
{
    Actions action = new Actions(BrowserWindow.Instance.Driver);
    action.moveToElement(WebElement).build().perform();
}
© www.soinside.com 2019 - 2024. All rights reserved.