Selenium WebDriver SubMenu点击不起作用

时间:2012-06-28 09:20:54

标签: c# selenium webdriver

我无法使用c#使用selenium webdriver点击SubMenu项目。 我使用的是IE9和FireFox 13。 我尝试过Action Builder但它不起作用。 它给出了一个错误,指出无法单击元素。

    WebDriverWait Wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5));
    IWebElement menu = Wait.Until((d) => webDriver.FindElement(By.Id("id1")));
    IWebElement menuOption = Wait.Until((d)=>webDriver.FindElement(By.Id("ID2")));
            Actions builder = new Actions(webDriver);
            builder.MoveToElement(menu).Build().Perform();
            Thread.Sleep(5);
            //then click when menu option is visible
            menuOption.Click();

我甚至使用过javascript: js.ExecuteScript(“return $(\”a:contains('ID1')\“)。mouseover();”); //鼠标移动到主菜单
。webDriver.FindElement(By.Id( “ID2”))点击();

请提供点击隐藏元素的解决方案

2 个答案:

答案 0 :(得分:1)

你可以使用Expected Conditions等待悬停在其上方的元素可点击(Thread.sleep()几乎总是不好的选择。而5毫秒就不够了。)。

这个类的docsExpectedConditions命名空间中的OpenQA.Selenium.Support.UI)已经破坏了,因为我现在可以看到它们,但是如果您可以按照上面链接中的Java代码,{{ 3}}是Java的预期条件 - 它在C#中也几乎相同。

答案 1 :(得分:1)

而不是使用语句Thread.sleep()。您可以在确认元素显示后尝试单击该元素。

获取要单击的WebElement后,使用ExpectedContition语句中的isDisplayed()方法检查是否显示了该文件,其中@Slanec正在讨论上述帖子。

通过这种方式,您可以确保只有在Wait.Until()返回 true 之后才会单击该元素。即显示menuOption

我在java中编写代码,因为我不知道C#。但我想你可以弄清楚我想说的是什么 -

    new WebDriverWait(driver, 60).until(new ExpectedCondition<Boolean>() {

        public Boolean apply(WebDriver driver ) {


            return driver.findElement(By.Id("ID2")).isDisplayed();
        }
    });

我希望这会对你有所帮助。