【问题标题】:Select dropdown in AngularJS application from Python Selenium从 Python Selenium 中选择 AngularJS 应用程序中的下拉菜单
【发布时间】:2017-04-19 20:08:09
【问题描述】:

我想在PythonSelenium 中测试页面,它使用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()

然后

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id('xtzpp001'))
for i in select.options:
   .......etc etc

我也使用了显式等待。

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

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

或者我可以使用量角器(或任何 javascript 框架)从这个阶段继续在 Javascript 中进行测试并在 Python 中集成/回调结果吗??

【问题讨论】:

  • 如果可以自动化 AngularJS 页面,我已经准备好使用 Selenium 在 Javascript 中重新做所有事情。有什么建议吗?

标签: python selenium protractor


【解决方案1】:

使用 selenium.webdriver.support.ui 中的 Select 类。将选择 web 元素传递给构造函数。使用 selectByVisibleText。参考@alecxe在帖子中的回答——Selenium - Python - drop-down menu option value

【讨论】:

  • 我已经尝试过这些选项,包括 selenium-python.readthedocs.io/… 中的 select_by_index()、select_by_value()
  • 您遇到什么错误?或者浏览器发生了什么?
  • 抛出 NoSuchElementException
【解决方案2】:

如果您已经尝试了所有可能的尝试但从未成功,您应该尝试使用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");

【讨论】:

    【解决方案3】:

    你也可以使用 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()
    

    【讨论】:

    • 你是怎么想出“submenu1”和“nav”的??
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2022-11-11
    • 2017-03-23
    • 1970-01-01
    • 2023-03-29
    • 2020-12-11
    • 2018-02-17
    • 2020-02-19
    相关资源
    最近更新 更多