Как выбрать из выпадающего списка через Selenium? - PullRequest
1 голос
/ 09 апреля 2019

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

<form method="get" class="forumForm">
        <label for="dispItems">Show items:</label> 
        <select id="dispItems" class="dispItems">
            <option selected="selected">15</option>
            <option>30</option>
            <option>60</option>
            <option>90</option>
            <option>120</option>
            <option>150</option>
        </select>
</form>

Я хочу изменить это, чтобы последний параметр былвыбран.Посредством других ответов я попытался найти следующее решение:

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id("dispItems"))

# None of these two options work.
select.select_by_index(4)            # Option 1.
select.select_by_visible_text("150") # Option 2.

И вариант 1, и вариант 2 возвращают следующее сообщение об ошибке:

WebDriverException: Message: 

Если я попытаюсь:

select.select_by_visible_text("random")

Я получаю следующее сообщение об ошибке:

NoSuchElementException: Message: Could not locate element with visible text: random

Редактировать: Решение, предложенное KunduK:

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

element=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH    ,'//select[@id="dispItems"][@class="dispItems"]')))
time.sleep(1)
select=Select(element)
time.sleep(1)
select.select_by_visible_text('150')

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Попробуйте ниже выбрать последний элемент driver.find_element_by_xpath («(// select ['dispItems'] / option) [last ()]»). Click ()

1 голос
/ 09 апреля 2019

Попробуйте WebDriverWait это должно работать.

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

element=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//select[@id="dispItems"][@class="dispItems"]')))
select=Select(element)
select.select_by_visible_text('150')

OR

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

element=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//select[@id="dispItems"][@class="dispItems"]')))
element.click()
element.send_keys(Keys.END)
element.send_keys(Keys.ENTER)

РЕДАКТИРОВАНИЕ:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

element=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//select[@id="dispItems"][@class="dispItems"]')))
element.click()
time.sleep(2)
element.send_keys(Keys.END)
time.sleep(2)
element.send_keys(Keys.ENTER)
1 голос
/ 09 апреля 2019

Попробуйте использовать явное ожидание:

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


select = Select(ui.WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "dispItems"))))
select.select_by_index(4)

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...