【问题标题】:How to select an option from a dropdown of non select tag?如何从非选择标签的下拉列表中选择一个选项?
【发布时间】:2019-08-07 17:40:45
【问题描述】:

我正在尝试从下拉菜单中选择一个值。我尝试了很多在这里找到的解决方案,但没有任何效果,有时我有错误无法滚动查看。

代码试验:

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains

browser = webdriver.Chrome()  # Optional argument, if not specified will search path.
browser.get('https://dzairannonces.com/posts/create');
mySelectElement = browser.find_element_by_id('parentId')
dropDownMenu = Select(mySelectElement)

我想从下拉表单中选择一个值,并从我们选择第一个下拉表单时出现的第二个下拉表单中选择另一个值

这个代码我也试过了,还是不行

import unittest
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time


class Drpdowm(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_drpdown(self):
        driver = self.driver
        driver.maximize_window()
        driver.get('https://dzairannonces.com/posts/create')
        time.sleep(10) # Let the user actually see something!
        s1=Select(driver.find_element_by_id('parentId'))

        print(s1.options)


        for opt in s1.options:
            s1.select_by_value(' 315 ')

    def tearDown(self):
        self.driver.quit()

【问题讨论】:

  • 你是如何选择第二个选项的。
  • 如果在一个下拉菜单中选择一个选项会导致第二个下拉菜单重新生成其选项,那么您需要等待该选项出现在第二个下拉菜单中才能选择它。
  • 我什至无法在第一个下拉菜单中选择表单
  • 具体见alecxe's answer

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

正确的代码是

s1=Select(driver.find_element_by_id('parentId'))
s1.select_by_value('315')

HTML attributes 在涉及额外空格或换行时非常严格,您需要提供原样

的值

请参阅Select Support 章节,了解专为使用<select> tags 而设计的 Python WebDriver API

关于整体测试设计,一个好主意是实现Page Object Model Design Pattern,它将允许您拆分 UI 和测试逻辑,并使您的测试健壮、可靠且更易于重构。有关详细信息,请参阅Page Objects 章节。

【讨论】:

    【解决方案2】:

    选择一个选项,例如Automobilesnon <select> 标签的下拉菜单中,您可以使用以下解决方案:

    • 代码块:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
      options = webdriver.ChromeOptions()
      options.add_argument('start-maximized')
      driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
      driver.get('https://dzairannonces.com/posts/create')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.select2-selection__rendered#select2-parentId-container"))).click()
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='select2-results']/ul//li[@class='select2-results__option' and contains(., 'Automobiles')]"))).click()
      
    • 浏览器快照:

    【讨论】:

    • 效果很好,抱歉我的英语不好,谢谢
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2017-10-17
    相关资源
    最近更新 更多