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();
}
如果在悬停尝试后在按钮关闭处设置了一个断点...,我会注意到将鼠标移到“选项卡”上也不会导致按钮可见。
嗯。真奇怪但是更换action.MoveToElement(WebElement).Perform();与action.MoveToElement(WebElement).Build()。Perform();而且有效。我读过,Build是内置在Perform中的。但是我有点sm之以鼻,希望有什么事情发生。而且有效。
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();
}