悬停 - >等待可见性 - >再次盘旋(没有睡觉)

时间:2014-08-09 18:21:53

标签: c# selenium selenium-webdriver

我有一个像结构一样的菜单,在菜单项上悬停一段时间后会打开一个子菜单。我在使用Selenium的确定性方法(=不使用Thread.Sleep)来测试此菜单时遇到问题。

  • 要悬停在元素上,我需要使用Selenium的Actions构建器类(MoveToElement
  • 要等待子菜单可见,我需要使用WebDriverWait.Until(d => subMenuWebElement.Displayed)

如何将这两种方法结合起来?我还没有找到一种方法将WebDriverWait.Until调用添加到Actions对象。解决问题的推荐方法是什么?

我在SOF上找到了各种其他线程,但是,它们要么只解决上面两个要点中的一个,要么没有工作答案(例如Selenium WebDriver MoveToElement - hidden element, hover and toggleClass)。

希望有人可以提供帮助: - )

2 个答案:

答案 0 :(得分:0)

您可以拆分操作构建器。没有必要将其作为一个动作。

构建并执行悬停操作。使用webdriver等待。然后构建并执行新操作

答案 1 :(得分:0)

尝试涉及JavascriptExecutor

第1步

String menu_selector="abracadabra";

((JavascriptExecutor)driver).executeScript("$(\'"+menu_selector+"\').hover();");

注意:如果支持jQuery,这个适合你。

第2步 然后让fluentWait等待子菜单出现:

String subMenu_selector="blablabla";


fluentWait(By.cssSelector(subMenu_selector));


   public WebElement fluentWait(final By locator) {
/*
fluent wait impementation documentation:
        http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html
*/
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)

                .withTimeout(10, TimeUnit.SECONDS)
                .pollingEvery(10, TimeUnit.MILLISECONDS)

//                .ignoring(NoSuchElementException.class);
                .ignoring(org.openqa.selenium.NoSuchElementException.class);

        WebElement foo = wait.until(
                new Function<WebDriver, WebElement>() {
                    public WebElement apply(WebDriver driver) {
                        return driver.findElement(locator);
                    }
                }
        );
        return foo;
    }

    ;