#python #selenium
#python #селен
Вопрос:
Добрый день. Как мне выбрать опцию из выпадающего меню с элементом html <span class="underlying">AUD/JPY</span>
. Я попробовал рекомендуемые методы, такие как from selenium.webdriver.support.ui import Select ; select = Select(driver.find_element_by_xpath('//*[@id="all-accounts"]/li/a/div[1]/div[2]'));
После запуска скрипта консоль возвращает сообщение «Не удается найти элемент». Но когда я запускаю скрипт через однострочную консоль, выпадающий вариант выбирается точно.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
#allow pop up notifications
option = Options()
option.add_argument("--disable-infobars")
option.add_argument("start-maximized")
option.add_argument("--disable-extensions")
option.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})
#start the webpage
browser = webdriver.Chrome(chrome_options=option, executable_path='C:\Users\User\Documents\P.W\Projects\pythonProject2\chromedriver')
browser.get('https://oauth.binary.com/oauth2/authorize?app_id=1amp;l=ENamp;signup_device=desktopamp;date_first_contact=2020-09-11')
emailbar = browser.find_element_by_xpath('//*[@id="txtEmail"]')
emailbar.send_keys('myusername')
passwordbar = browser.find_element_by_xpath('//*[@id="txtPass"]')
passwordbar.send_keys('password')
loginbutton = browser.find_element_by_xpath('//*[@id="frmLogin"]/div[3]/button')
loginbutton.click()
#select between real account or virtual account
dropdownaccount = browser.find_element_by_xpath('//*[@id="main-account"]/li/a/div[2]')
dropdownaccount.click()
Комментарии:
1. Можете ли вы поделиться демонстрационным набором учетных данных?
Ответ №1:
При работе с selects в Selenium я делаю следующее:
- Найдите select и нажмите на него
- Найдите нужную опцию и нажмите на нее
Так, например
select = driver.find_element_by_id('my_select')
select.click()
selected_option = driver.find_element_by_id('my_option_id')
selected_option.click()
Конечно, вы можете изменить методы поиска, чтобы использовать xpath, css и т.д. В зависимости от вашей веб-страницы.
Комментарии:
1. Верно, но проблема не в выборе, а в его нахождении. он не может найти эти элементы
2. Ну, есть 2 возможности. 1. Ваш xpath неверен. 2. Содержимое является динамическим и еще не загружено. Когда вы говорите «однострочная консоль», если вы говорите о консоли браузера, то, скорее всего, ваш xpath правильный. Если нет, вы могли бы попробовать что-то вроде: driver.find_element_by_xpath(‘//span[содержит(text(), ‘AUD / JPY’)]’). Во-вторых, вы можете использовать WebDriverWait(), чтобы попытаться дождаться загрузки содержимого.