从Python Selenium中选择AngularJS应用程序中的下拉列表

时间:2016-08-26 04:09:19

标签: python selenium protractor

我想在使用Python的{​​{1}} Selenium中测试页面。它包含一个选择选项,我尝试了许多选项来选择它但它失败了。

AngularJS

正如我所说,我试过---

<select id="xtzpp001" ng-model="..." ng-options="...." ng-change="changeView()">
  <option value class>select</option>
  <option value="200" selected="selected">Student 1</option>
  <option value="201">Student 2</option>
  <option value="202">Student 3</option>
</select>

然后

driver.find_element_by_xpath('//select[@id="xtzpp001"]/option[contains(text(), "Student 2")]').click()

我也使用了明确的等待。

我开始知道pytractor可以在这种情况下帮助我(虽然没有积极开发),但是我无法找到任何关于使用pytractor选择选项的文档。

还有其他方法可以实现吗?或pytractor等价?

或者我可以使用量角器(或任何javascript框架)继续在此阶段的from selenium.webdriver.support.ui import Select select = Select(driver.find_element_by_id('xtzpp001')) for i in select.options: .......etc etc 中进行测试,并在Javascript中集成/回调结果吗?

3 个答案:

答案 0 :(得分:0)

使用selenium.webdriver.support.ui中的Select类。将select webelement传递给构造函数。使用selectByVisibleText。请参阅@alecxe在帖子中的答案 - Selenium - Python - drop-down menu option value

答案 1 :(得分:0)

如果您尝试了所有可能的尝试但从未取得成功,则应尝试使用execute_script(),如下所示: -

element = driver.find_element_by_id("xtzpp001")

driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", element, "Student 2");

答案 2 :(得分:-1)

你也可以使用Actions点击菜单项,这是一个例子:

menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()