我一直在拼命地试着从一个启用了AJAX的selt2选择列表中选择一个选项。我设法让它与IE网络驱动程序一起工作,但不能与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调用的时候,它只是挂起并继续下一步,而不实际触发selt2的事件来填充所选的项。
我也厌倦了使用http://code.google.com/p/selenium/wiki/AdvancedUserInteractions API,也得到了类似的结果。
以前有没有人遇到过类似的问题?
8条答案
按热度按时间z0qdvdin1#
你能把定位器也给我们看看吗?这是我测试过的,没有任何问题。
注意事项
1.要打开选择框,请使用css选择器
#s2id_e1 .select2-choice
或等效的XPath。1.通过css选择器
#select2-drop:not([style*='display: none'])
或等效的XPath,确保#select2-drop
是可见的。1.确保使用
subContainerClass
+.select2-results li.select2-result-selectable
或等效的XPath单击可选项目。bxgwgixi2#
我花了一些时间让它在FF、Chrome和IE8-11上运行。
1.点击下拉箭头
1.点击所需的li
以下是我的简化代码:
pxiryf3j3#
我使用下面的代码来选择所需的选项,它起作用了。这也必须比执行多次点击更快。
而且,在Python中,如果这一行程序不起作用,可以尝试将其拆分成其组件:
7xzttuei4#
以下是我的代码(获取/显示):
正在获取
select2
个可用元素(结果):显示
select2
可用元素(结果)使用ID为:
s2id_autogen1
的select2
:goucqfw65#
这里有一个可靠的、可重用的解决方案,它可以处理在一个页面上与多个selt2下拉菜单交互的额外问题。
出于某种原因,即使您可以在屏幕上看到搜索值并且光标在其中,WebDriver也不会将要向其发送搜索值的元素视为可见。这就是“如果显示”测试要检查的内容。然后它使用不同的选择器。
它是一个函数,您可以发送想要与之交互的字段的ID(减去标准的s2id_)和要选择的值(或至少足够的值来进行选择)。
额外的thread.sky()只是为了帮助我观看它。我不认为他们会影响结果。
vcirk6k66#
fcy6dtqo7#
尝试选择WebDRIVER Java脚本执行。下面是一个方便的C#方法。
woobm2wo8#
对于2022年的读者来说...使用SelectElement Class与selt2的交互:(CSharp)