如何在使用Java的Selenium WebDriver中执行mouseover函数?
我想在一个下拉菜单上做mouseoverfunction。 当我们将鼠标hover在菜单上时,将显示新的选项。 我试图用xpath单击新的选项。 但是不能直接点击菜单。 所以,作为手动方式,我试图将鼠标hover在下拉菜单上,然后点击新的选项。
Actions action = new Actions(webdriver); WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a")); action.moveToElement(we).build().perform();
实际上不可能执行“鼠标hover”操作,而是需要将所有要实现的操作链接在一起。 所以移动到显示其他人的元素,然后在同一链中,移动到现在显示的元素,然后单击它。
当使用动作链时,你必须记住“像用户那样做”。
Actions action = new Actions(webdriver); WebElement we = webdriver.findElement(By.xpath("html/body/div[13]/ul/li[4]/a")); action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();
尝试执行以下操作时,这些答案都不起作用:
- 将鼠标hover在菜单项上。
- 查找hover后只有可用的隐藏元素。
- 点击子菜单项。
如果在moveToElement之后插入一个“perform”命令,它将移动到该元素,并且子菜单项显示一段短暂的时间,但这不是一个hover。 隐藏的元素会立即消失,然后才能findElementNotFoundException。 我试了两件事:
Actions builder = new Actions(driver); builder.moveToElement(hoverElement).perform(); builder.moveToElement(clickElement).click().perform();
这不适合我。 以下为我工作:
Actions builder = new Actions(driver); builder.moveToElement(hoverElement).perform(); By locator = By.id("clickElementID"); driver.click(locator);
使用动作hover和标准WebDriver点击,我可以hover,然后单击。
基于这个博客文章,我能够触发徘徊使用Selenium 2 Webdriver下面的代码:
String javaScript = "var evObj = document.createEvent('MouseEvents');" + "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" + "arguments[0].dispatchEvent(evObj);"; ((JavascriptExecutor)driver).executeScript(javaScript, webElement);
这段代码工作得很好:
Actions builder = new Actions(driver); WebElement element = driver.findElement(By.linkText("Put your text here")); builder.moveToElement(element).build().perform();
鼠标hover后,您可以继续执行您想要显示的信息的下一个动作
我发现这个问题寻找一种方法来做我的JavaScripttesting同样的事情,使用量angular器(一个JavaScript前端Selenium。)
我用量angular器1.2.0和webdriver 2.1的解决scheme:
browser.actions() .mouseMove( element(by.css('.material-dialog-container')) ) .click() .perform();
这也接受一个偏移量(我用它来点击一个元素的上方和左侧:)
browser.actions() .mouseMove( element(by.css('.material-dialog-container')) , -20, -20 // pixel offset from top left ) .click() .perform();
使用Selenium java WebDriver进行鼠标hover的示例程序:
public class Mhover { public static void main(String[] args){ WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://www.google.com"); WebElement ele = driver.findElement(By.id("gbqfba")); Actions action = new Actions(driver); action.moveToElement(ele).build().perform(); } }
检查这个例子,我们如何实现这一点。
public class HoverableDropdownTest { private WebDriver driver; private Actions action; Consumer < By > hover = (By by) - > { action.moveToElement(driver.findElement(by)) .perform(); }; @Test public void hoverTest() { driver.get("https://www.bootply.com/render/6FC76YQ4Nh"); hover.accept(By.linkText("Dropdown")); hover.accept(By.linkText("Dropdown Link 5")); hover.accept(By.linkText("Dropdown Submenu Link 5.4")); hover.accept(By.linkText("Dropdown Submenu Link 5.4.1")); } @BeforeTest public void setupDriver() { driver = new FirefoxDriver(); action = new Actions(driver); } @AfterTest public void teardownDriver() { driver.quit(); } }
详细的答案,请点击这里 – http://www.testautomationguru.com/selenium-webdriver-automating-hoverable-multilevel-dropdowns/