从下面的html(这是下拉菜单的一部分),我需要找到元素" Hello World"并单击链接
<li data-name="Tools Menu"> <a href="javascript:void(0);">Tools</a>
<ul>
<li data-name="Test Menu"><a href="/Menu/Index">Test</a>
</li>
<li data-name="Hello World"><a href="/HelloWorld/Hello">Hello World</a>
</li>
</ul>
</li>
到目前为止,我有以下代码:
ieDriver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 3));
var elements = ieDriver.FindElement(By.CssSelector("[data-name=\"Hello World\"]"));
elements.Click();
然而,它失败了以下例外:
OpenQA.Selenium.ElementNotVisibleException : Cannot click on element
答案 0 :(得分:0)
我不确定但你是否有可能点击错误的元素?
<li data-name="Hello World">
<a href="/HelloWorld/Hello">Hello World</a>
</li>
[data-name=\"Hello World\"]
所以你点击li-tag而不是a-tag,导致你搜索一个名为&#34; data-name&#34;的属性。
也许这就是问题?
祝你好运答案 1 :(得分:0)
这里的问题是你的代码处理速度比页面的处理速度快,在处理页面中的JS或下拉菜单时会发生很多事情。我建议使用以下代替driver.FindElement方法:
public static IWebElement WaitForElementPresent(this IWebDriver driver, By by)
{
try
{
return new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(x => x.FindElement(by));
}
catch (WebDriverTimeoutException exception)
{
throw new AssertionException(string.Format("Element {0} was not found. Page source: {1}{2}",
by,
Environment.NewLine,
driver.PageSource),
exception);
}
}
在处理Click()方法之前,它基本上会等到元素可见。