Храните параметры динамического раскрывающегося списка с помощью Python и Selenium Webdriver.

Я пытаюсь сохранить значения адреса, сгенерированные поиском почтового индекса, а затем создать список, который я могу использовать модуль python Random для выбора случайного значения с помощью random.choice

Сценарий:

Введите почтовый индекс, нажмите «Поиск» — выпадающий список будет динамически заполнен доступными вариантами.

Я использую словарь для хранения значений формы в виде xpaths, а затем использую веб-драйвер для find_elements_by_xpath или find_element_by_xpath.

Код выглядит примерно так (не правильно отформатирован, просто ссылка):

__author__ = 'scott'

from selenium import webdriver
import random

driver = webdriver.Firefox()
driver.maximize_window()
driver.get('https://www.somerandomsite')

formFields = {'postcode' : "//INPUT[@id='postcode']",
        'county' : "//SELECT[@id='address']/option"}

pcList = ['BD23 1DN', 'BD20 0JZ']

#picks a random postcode from pcList#
driver.find_element_by_xpath(formFields['postcode']).send_keys(random.choice(pcList))

driver.find_elements_by_xpath(formFields['county'])

#####now need to store the values from county and select a random option from the list######

driver.close()

Использование случайного модуля для моих почтовых индексов не проблема.

Если кто-нибудь может дать какое-то руководство или указать мне направление для справки, я был бы очень признателен - я всего лишь новичок в Selenium и Python - добился устойчивого прогресса, но, похоже, ходит кругами по этой проблеме - мой первый проблема заключалась в использовании find_element_by_xpath простого «s», отсутствующего «элемента», на какое-то время меня отбросило.


person Scott    schedule 12.01.2015    source источник


Ответы (1)


Используйте предоставленный класс Select. готовыми привязками селена python — это хороший уровень абстракции над select->option структурами HTML:

from selenium.webdriver.support.ui import Select

# initialize the select instance
select = Select(driver.find_element_by_id('address'))

# get the list of options and choose a random one
options = [o.text for o in select.options]
option = random.choice(options)

# select it
select.select_by_visible_text(option)
person alecxe    schedule 12.01.2015
comment
Спасибо Алексею. Именно то, что я искал. Очень ценю это. - person Scott; 13.01.2015