如何使用Selenium和Python从DropDown列表中选择一个值?

问题描述 投票:0回答:1

我有以下的下拉列表,我想选择 "上一年 "的值。

Html_section

(我已经手动选择了该值)

问题有两个,我很难用我的代码 "找到 "或定位这个下拉列表,而且 "id "中的数字会在不同的页面上变化,所以我不能只通过它的 "id "来定位它。我正在尝试使用下面的Python 3代码。

select = driver.find_elements_by_xpath('//*[contains(@id, "dropdown-intervaltype")]')
select.click()
# then click the "Previous Year" text

我也试过了

select = Select(driver.find_elements_by_xpath('//*[contains(@id, "dropdown-intervaltype")]'))
select.select_by_value("Previous Year")

现在这个网站是一个工作的私人网站,所以我不能授予访问权,但我希望有人能指出,我还可以尝试用什么方法来定位这个元素,并选择合适的下拉值?我试过用 "css "和 "xpath "来定位这个字段,没有成功。

xpath = //*[@id="dropdown-intervaltype31442"]
css_selector = #dropdown-intervaltype31442
full_xpath = /html/body/div[4]/div[2]/div/div[3]/div[3]/div/div[2]/div/form/table/tbody/tr/td[2]/div/div[1]/select

任何测试的想法都会有帮助。谢谢!我有下面的下拉列表,它可以选择正确的下拉值。

python-3.x selenium xpath drop-down-menu css-selectors
1个回答
0
投票

在这里,我想说的是,我很难 "找到 "或... <select> 元素是一个动态元素。所以要选择 <option> 附文 前一年 使用 你需要诱导 WebDriverWait 对于 element_to_be_clickable() 您可以使用以下任何一种方式 定位策略:

  • 使用 CSS_SELECTOR:

    select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select[id^='dropdown-intervaltype'][name^='deviceServicesModel']"))))
    select.select_by_visible_text('Previous Year')
    
  • 使用 XPATH:

    select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[starts-with(@id, 'dropdown-intervaltype')][starts-with(@name,'deviceServicesModel')]"))))
    select.select_by_visible_text('Previous Year')
    
  • 说明: : 你必须添加以下导入。

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import Select
    

引用

你可以在以下几个相关讨论中找到。


0
投票

您可以使用XPath.NET Framework 2.0或2.0版本来实现。

new Select (driver.findElement(By.xpath("/select[arts-with(@id, 'dropdown-intervaltype')][arts-with(@name,'deviceServicesModel')]")).selectByVisibleText("Privious Year")。

你也可以使用id.newSelect(driver.findElement()).selectByVisibleText("Privious Year");。

new Select(driver.findElement(By.id("dropdownintervaltype"))).selectByVisibleText("阿根廷")。

你检查你的xpath,并采取正确的xpath。希望这个答案对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.