2016-09-01 3 views
1

Вот изолированный HTML код:Селена не удается изменить выпадающий выбор

<span style="position: relative; width: 100%; display: inline-block;"> 
    <select id="0ac88542d16d6200fb983d094f655c76_select" class="form-control"> 
     <option value="display_value">Number</option> 
     <option value="sys_class_name">Type</option> 
    </select> 
</span> 

Использование Python Селена, нажмите на ниспадающем элементе, чтобы развернуть его:

search_elemets = driver.find_elements_by_xpath("//*[@class='form-control']") 
search_elemets[0].click() 

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

Вариант 1

Select(search_elemets[0]) \ 
    .select_by_visible_text("Number") 
driver.find_elements_by_tag_name('option')[1].click() 

Вариант 2

Select(search_elemets[0]) \ 
    .select_by_value("display_value") 
driver.find_elements_by_tag_name('option')[1].send_keys(Keys.RETURN) 

Вариант 3

for option in search_elemets[0].find_elements_by_tag_name('option'): 
    if option.text == 'Number': 

     # Use one of the options below 
     # Option 3.1 
     Select(search_elemets[0]) \ 
      .select_by_visible_text("Number") 
     option.click() 
     break 

     # Option 3.2 
     actions = ActionChains(driver) 
     actions.move_to_element(option) 
     actions.click(option) 
     actions.perform() 
     break 

Все попытки привести к визуальному мыши, которая выполняется с помощью WebDriver, но значение не изменилось после ..

+0

Я думаю search_elemets [0] линия .click() не требуется ... – Grasshopper

+0

правильно ли работа страницы с вменяемость ручного тестирования? Не предполагайте, что проблема заключается в автоматическом тестовом коде. Ваши локаторы довольно хороши, использование идентификаторов или имен намного предпочтительнее для создания надежных локаторов. Google «Стратегия локализации веб-сервера Selenium WebDriver». Этот плагин FF https://addons.mozilla.org/en-GB/firefox/addon/element-locator-for-webdriv/ дает неплохие примеры. –

ответ

0

@katericata Вашего HTML как как- Номер Типа Type2 Type3

и мой веб-класс драйвера, как, здесь вы можете заменить выпадающие пункты как типа 2, типа 3 и т. д., которые вы хотите выбрать.

driver.findElement (By.xpath ("code ']")). SendKeys ("Type3"); }} дайте мне знать, если есть какие-либо проблемы.

+0

Спасибо. С помощью этой строки работал: 'driver.find_element_by_xpath (" // * [@ class = 'form-control'] "). Send_keys (" N ")'. Как вы можете видеть, мы отправляем только первый символ. Если мы отправим весь текст, это не так, что странно. Мы можем столкнуться с проблемами, если сталкиваемся с выпадающим списком с двумя записями, начинающимися с того же символа. – katericata

0

Класс form-control может дать вам другие элементы. Попробуйте найти частичного ид

search_elemet = driver.find_element_by_css_selector('[id*="select"]') 
Select(search_elemet).select_by_visible_text('Number') 
# or 
Select(search_elemet).select_by_value('display_value') 
0

Правильный способ сделать это - использовать опцию выбора пользовательского интерфейса поддержки. например .:

from selenium.webdriver.support.ui import Select 

driver = webdriver.Firefox() 

select_element = Select(driver.find_element_by_id("0ac88542d16d6200fb983d094f655c76_select")) 
print [o.text for o in select_element.options] # these are string-s 
select_element.select_by_visible_text("Type") 
# or 
select_element.select_by_value("display_value") 
# or 
select_element.select_by_index(1) 

here Документация и кредит Daniel Abel here.

0
Use javascript executor : 
javascript executor helps to click small and hidden elements. 
element: the xpath to be executed. 

    public void javascriptclick(String element) 
    { 
     WebElement webElement=driver.findElement(By.xpath(element)); 
     JavascriptExecutor js = (JavascriptExecutor) driver; 

     js.executeScript("arguments[0].click();",webElement); 
     System.out.println("javascriptclick"+" "+ element); 
    } 
+0

При предоставлении ответа предпочтительнее дать [некоторое объяснение, почему ваш ответ] (http://stackoverflow.com/help/how-to-answer). –

+0

javascript-исполнитель помогает щелкнуть маленькие и скрытые элементы. элемент: xpath для выполнения. –

+0

Объяснение должно быть в сообщении. Существует кнопка редактирования вверху и слева от этого комментария. –

Смежные вопросы