Selenium Select Element

0

Witam, mam pytanie związane z Selenium i wypełnieniem formularza. Zasada działania formularza:
Przyjmuje jakąś wartość, po chwili podawane są przykładowe wyniki i musimy wybrać któryś z nich, dla przykładu:
Podajemy np wyraz: "Ka" i może się nam wyświetlić np:
"Kanapka", "Kaloryfer", "Kalafior".
W jaki sposób mogę kliknąć np Kaloryfer?
Próbowałem z select_by_visible_text || wpisać podstawową wartość i Enter, ale nic nie działa, a pomysły mi się wyczerpały.

Za pomoc z góry dzięki

0

Jak robisz to przy użyciu select tag-a to podpinasz się pod atrybut options

0

Myślałem, że ustawię styl, jako Visible, ale albo nie pomogło lub źle to zrobiłem:

driver.execute_script("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", driver.find_element_by_id("changedataform_miejscowosc"))

Tak wygląda kod html po wpisaniu przykładowej wartości ( np "ka" dla przykładu):

<input type="text" maxlength="255" style="position:absolute;left:0px;top:20px;width:200px;" value="Łódź-Polesie"
name="miejscowosc" id="changedataform_miejscowosc" class="DF_textbox" autocomplete="off">

, gdy nie podamy przykłądowej wartości, to class nosi nazwę np ""DF_textbox 123456"

Gdy chce się odwołać::

Select(driver.find_element_by_id("changedataform_miejscowosc")).select_by_visible_text(u"Ka")
driver.find_element_by_id("changedataform_miejscowosc").click()

Dostaję zwrotkę:
Select only works on <select> elements, not on <input>

0

Te Twoje podpowiedzi nie pojawiają się (w kontekście struktury dokumentu) wewnątrz elementu input, tylko pewnie coś jest budowane gdzieś indziej wykorzystując JSa - i to właśnie to coś budowanego dynamicznie musisz namierzyć (odpal przeglądarkę i zobacz, co się tam pod spodem dzieje).

Selenium nie jest człowiekiem i nie ma pojęcia o tym, że pisząc find_element_by_id(...).select_by_visible_text() masz tak naprawdę na myśli znajdź mi jakiegoś diva, który znajduje się NAD podanym przeze mnie inputem, i z tamtego diva wybierz pasujący element, dlatego słusznie Ci zwraca błąd mówiący o tym, że input nie zawiera żadnej listy opcji (bo i sam z siebie nie zawiera - to tylko iluzja z wykorzystaniem JSa).

0
Patryk27 napisał(a):

Te Twoje podpowiedzi nie pojawiają się (w kontekście struktury dokumentu) wewnątrz elementu input, tylko pewnie coś jest budowane gdzieś indziej wykorzystując JSa - i to właśnie to coś budowanego dynamicznie musisz namierzyć (odpal przeglądarkę i zobacz, co się tam pod spodem dzieje).

Selenium nie jest człowiekiem i nie ma pojęcia o tym, że pisząc find_element_by_id(...).select_by_visible_text() masz tak naprawdę na myśli znajdź mi jakiegoś diva, który znajduje się NAD podanym przeze mnie inputem, i z tamtego diva wybierz pasujący element, dlatego słusznie Ci zwraca błąd mówiący o tym, że input nie zawiera żadnej listy opcji (bo i sam z siebie nie zawiera - to tylko iluzja z wykorzystaniem JSa).

OMG, zapomniałem o tym, dzięki

0

Natomiast jedna rzecz mnie zastanawia.
Jest na stronie przycisk, do którego odwołuje się poprzez.

driver.find_element_by_xpath('//*[@value="zapisz"]').click

Nie dostaję Erroru, że element nie został namierzony, ale równocześnie przycisk nie został kliknięty przez skrypt - wtf?
Jest na to jakieś racjonalne wyjaśnienie?

0

Może masz kilka przycisków o takim tytule?

0
Patryk27 napisał(a):

Może masz kilka przycisków o takim tytule?

Wyszukując ten string w źródle trafiłem tylko na (ten przycisk, zwykły string i kod javascript)

Znaczy w tym przypadku odwołuje się do wartości:

driver.find_element_by_xpath('//*[@value="zapisz zmiany"]').click

, Bo id wygląda tak: "button1623745823645" - i liczby ciągle się zmieniają, a nie natrafiłem, żeby było coś jak np w SQL: '' , że np podam button

0
Mistrzowski Wąż napisał(a):
Patryk27 napisał(a):

Może masz kilka przycisków o takim tytule?

Wyszukując ten string w źródle trafiłem tylko na (ten przycisk, zwykły string i kod javascript)

Znaczy w tym przypadku odwołuje się do wartości:

driver.find_element_by_xpath('//*[@value="zapisz zmiany"]').click

, Bo id wygląda tak: "button1623745823645" - i liczby ciągle się zmieniają, a nie natrafiłem, żeby było coś jak np w SQL: '' , że np podam button

Aff brakowało '()' .

Nie powinno aby wyrzucić błędu z literówką?

0

Brak nawiasów nie jest literówką - coś takiego jest prawdopodobnie prawidłowym kodem:

foo = driver.find_element_by_xpath('//*[@value="zapisz zmiany"]').click
foo()

(patrz: first-class functions)

1 użytkowników online, w tym zalogowanych: 0, gości: 1