![](/img/trans.png)
[英]How Can I Hover over on an invisible button using selenium webdriver?
[英]How to Hover over and click on an invisible element using selenium webdriver?
我的 HTML 页面上有一个不可见的元素,当鼠标悬停在该元素上时,该元素就会变得可见。 我要做的是
我正在为 selenium 网络驱动程序使用 Java API,以下是我一直在尝试的
Actions builder = new Actions(driver);
builder.moveToElement(MainMenuBTN).click().build().perform();
subMenuBTN.click();
发生的事情是,MainMenuBTN 上的 click() 正在生成 ElementNotVisible 异常。 我试着跟随以避免这种情况,但没有奏效。
Actions builder = new Actions(driver);
builder.moveToElement(mainMenuBTN).build().perform();
builder.click();
subMenuBTN.click();
注意:mainMenuBTN 和 subMenuBTN 是由
driver.findElement(By.xpath("xpath_string"))
我错过了什么吗? 帮助赞赏!
使用 javascript 执行器
((JavascriptExecutor) webdriver).executeScript("document.getElementById('btn').click();");
好吧,在多次回答你的问题并多次更改我的答案之后,我会 -
问题 - 我从原始代码中得到了什么 -
您需要将光标移动到 mainMenuBTN(这是可见的,而不是当您将鼠标悬停在它上面时变得可见的元素),然后显示您需要单击的 subMenuBTN。
根据我对原始代码的唯一编辑是添加一条语句,在您单击它之前将光标移动到您的 subMenuBTN。 当我需要单击子菜单项时,这种方式对我来说效果很好。
Actions builder = new Actions(driver);
builder.moveToElement(mainMenuBTN).build().perform();
builder.moveToElement(subMenuBTN).build().perform();
subMenuBTN.click();
如果是这种情况,请告诉我。
在我看来,您的 Actions 生成器有点不对劲。 这是我使用的示例:
public static void mouseClickByLocator( String locator ) {
WebElement el = driver.findElement( By.cssSelector( locator ) );
Actions builder = new Actions(driver);
builder.moveToElement( el ).click( el );
builder.perform();
}
Actions builder = new Actions(driver);
builder.MoveToElement(menu).MoveToElement(submenu).Click().Perform();
它在 Chrome 下工作,但在 FF 中不起作用
你可以试试这个:
这是因为当您将鼠标悬停在它上面时,元素的 id 会发生变化,您应该再次找到它。
Actions builder = new Actions(driver);
WebElement mainMenuBTN = getWebEl("xpath_string",5);
builder.moveToElement(mainMenuBTN).perform();
mainMenuBTN = getWebEl("xpath_string",5);
builder.click(mainMenuBTN);
我使用此方法对元素的实例化进行 ipmlement 控制显式等待。
protected WebElement getWebEl(String xpath, int waitSeconds) {
wait = new WebDriverWait(driver, waitSeconds);
return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)));
}
我的情况是我们有一个行表,如果鼠标悬停在该行上,其中一列 (td) 应该显示大约 4 个图标,我们应该点击它。
Action action=new Action(driver);
action.moveToElement(hoverElt).clickAndHold().build().perform();
它对我有用。 moveToELement()
将控件移动到元素
clickAndHold()
点击并按住悬停的元素,方便我们对可见元素进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.