我无法使用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”))点击();
请提供点击隐藏元素的解决方案
答案 0 :(得分:1)
你可以使用Expected Conditions等待悬停在其上方的元素可点击(Thread.sleep()
几乎总是不好的选择。而5毫秒就不够了。)。
这个类的docs(ExpectedConditions
命名空间中的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();
}
});
我希望这会对你有所帮助。