我一直在试图使用Selenium WebDriver从一个启用了ajax的select2选择列表中选择选项。我已经设法通过IE WebDriver使其工作,但是在Firefox中无法实现。这是我的IE的临时解决方案:
public static void SetSelect2Option(this IWebDriver driver, By locator, string subContainerClass, string searchTerm, TimeSpan? ajaxWaitTimeSpan = null)
{
var select2Product = driver.FindElement(locator);
select2Product.Click();
var searchBox = driver.FindElement(By.CssSelector(subContainerClass + " .select2-input"));
searchBox.SendKeys(searchTerm);
if (ajaxWaitTimeSpan != null)
{
driver.Manage().Timeouts().ImplicitlyWait(ajaxWaitTimeSpan.Value);
}
var selectedItem = driver.FindElements(By.CssSelector(subContainerClass + " .select2-results li")).First();
selectedItem.Click();
selectedItem.SendKeys(Keys.Enter);
}
在Firefox中,这个解决方案可以一直工作到SendKeys调用的那一点,然后就挂起并继续进行下一步,而没有实际触发select2的事件来填充所选项目。
我还尝试使用http://code.google.com/p/selenium/wiki/AdvancedUserInteractions API,结果类似。
有人之前遇到过类似问题吗?
select2Product
的元素被显示。否则,测试将随机失败并出现Elementnotvisibleexception
。 - Kristian Johannessen