我在Browserstack platform上使用Selenium和Python。
我正在测试select2
下拉列表,我总是需要点击两次下拉列表才能使其正常工作:
dropdown_click = driver.find_element_by_css_selector('#s2id_autogen2 a.select2-choice')
actions.click(dropdown_click).perform()
actions.click(dropdown_click).perform() # another click to open dropdown.
driver.implicitly_wait(2)
make_list = driver.find_element_by_id('select2-drop')
assert make_list.is_displayed()
有implicitly_wait
,但没有第二个click()
,下拉列表仍然不可见,断言失败。
这不是唯一一个在Selenium中以这种方式行为错误的JS下拉列表。
此JavaScript代码在浏览器中正常运行,但在Selenium中,只有在第一次点击时才正确。我第二次打电话给click()
两次。
$('span.opener').on('click', function() {
$(this).next('.dropdown').toggleClass('dropdown-visible');
})
Selenium和这些下拉有什么问题?
编辑:显式等待确实解决了这个问题。
答案 0 :(得分:1)
您可能希望先悬停到下拉菜单,然后执行点击操作。这在过去有些时候对我很有帮助。
答案 1 :(得分:0)
如果它的行为类似于使用以下语句可以起作用:
new SelectElement(driver.FindElement(By.Id("YourDropdownID"))).SelectByIndex(indexValueYouWantToSelct));
或者你可以这样做
new SelectElement(driver.FindElement(By.Id("YourDropdownID"))).SelectByText("YourDropDownItemText");
或者你也可以试试这个
new SelectElement(driver.FindElement(By.Id("YourDropdownID"))).SelectByValue("YourDoropDownItemValue");