Съхранявайте динамични падащи опции с Python и Selenium Webdriver

Опитвам се да запазя адресни стойности, генерирани от търсене на пощенски код, и след това да създам списък, който мога да използвам модула Random на python, за да избера произволна стойност с помощта на 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 selenium извън кутията - това е хубав слой за абстракция върху 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
Благодаря alecxe. Точно това, което търсих. Наистина оценявам това. - person Scott; 13.01.2015