1

我无法使用 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")).Click();

请给出一些点击隐藏元素的解决方案

4

2 回答 2

1

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

获得要单击的 WebElement 后,使用isDisplayed()上一篇文章中@Slanec 所谈论的 ExpectedContition 语句中的方法检查它是否显示。

通过这种方式,您可以确保只有在 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();
        }
    });

我希望这对你有帮助。

于 2012-06-28T10:39:53.097 回答
1

您可以使用预期条件等待元素在悬停在其上方后可点击(Thread.sleep()几乎总是不好的选择。而且 5 毫秒是不够的。)。

我现在可以看到此类(在命名空间中)的文档已损坏,但是如果您可以按照上面链接中的 Java 代码进行操作,这里是 Java 的预期条件 - 在 C# 中也几乎相同。ExpectedConditionsOpenQA.Selenium.Support.UI

于 2012-06-28T10:07:51.317 回答