2014-04-07 5 views
0

У меня есть несколько выбора опции, как:Селена выберите опцию

<select id="auto_year" class="element" onchange="loadMakes(this.value);" name="auto_year"> 
<option value="0000">- Year -</option> 
<option value="2014">2014</option> 
<option value="2013">2013</option> 
<option value="2012">2012</option> 
<option value="2011">2011</option> 
</select> 

<select id="auto_make" class="element" onchange="loadModels(document.getElementById('auto_year').value, this.value);;" name="auto_year"> 
<option value="0000">- Make-</option> 
</select> 

Первоначально вариант внутри выберите ид = «auto_make» пуст. Но поскольку я выбираю одну из опций из , выберите id = "auto_year", появится опция. Я сталкиваюсь с проблемой выбора значений. Мой код:

from selenium import webdriver 
from bs4 import BeautifulSoup 
import re 

browser = webdriver.Firefox() 
browser.get(certain_url) 
html_source = browser.page_source 

yearoption_val = browser.find_element_by_id('auto_year') 
for yearoption in yearoption_val.find_elements_by_tag_name('option'): 
if yearoption.text == '- Year -': 
    continue 
else: 
    yearoption.click() 
    itemmake_val = browser.find_element_by_id('auto_make') 
    for itemmake in itemmake_val.find_elements_by_tag_name('option'): 
    if (itemmake.text == r'\- Make \(\d+ items\) \-' or '- Model -'): 
    continue 
    else: 
    itemmake.click() 

Проблема с кодом он выбирает 2014 и перемещается в 2013, не смотря на опции в ид = auto_make на 2014. Любая помощь или предложения были бы очень полезны.

+0

Вы пробовали вставить небольшой сон после 'yearoption.click()' code? Это позволит убедиться, что метод onclick может выполняться. – Vish

+0

Спальные места никогда не будут мудрыми в сценарии автоматизации и их следует избегать –

ответ

0

Вы пытались создать экземпляр объекта Select? Вот пример из сайта Selenium в Python;

# available since 2.12 
from selenium.webdriver.support.ui import Select 
select = Select(driver.find_element_by_tag_name("select")) 
select.deselect_all() 
select.select_by_visible_text("Edam") 
1

Я боролся с той же проблемой 2 недели назад. Я попробовал несколько различных опций и получил метод ниже. Вопрос был click() или Select() сделал выбор, но не смог установить значение. Единственное, что вам может не хватать, - это отправить ключ к выбранному объекту.

из selenium.webdriver.common.keys импорта ключей

def select_option_from_a_dropdown(self, select_object, option_value): 
    """ 
    To select options in "<select>" in selenium we need to select the option first and then need 
    to send ENTER key on the select. 
    """ 
    options = select_object.find_elements_by_tag_name("option") 
    for option in options: 
     self.log.info(option.text) 
     if option.text.upper() == option_value.upper(): 
      option.click() 
    select_object.send_keys(Keys.RETURN) 

Если вы столкнулись с той же проблемой, как я, вам просто нужно выполнить yearoption_val.send_keys(Keys.RETURN) после yearoption.click().

** английский язык не мой первый язык. Пожалуйста, отредактируйте ответ в зависимости от ситуации

Смежные вопросы