我的HTML页面上有一个不可见的元素,当在元素上完成鼠标悬停时,该元素变为可见。我要做的是
我正在使用Java API进行selenium web驱动程序,以下是我一直在尝试的内容
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是由WebElements生成的
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();
如果是这种情况,请告诉我。
您的“动作”构建器对我来说有点不对这是我使用的一个例子:
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)));
}