Перейти к содержимому

Фотография

Проблемы с select (выпадающий список)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 Anna_Grace

Anna_Grace

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Anna Grace

Отправлено 22 мая 2014 - 12:41

Так выглядит код выпадающего списка. 

select id="trgLang" class="dirtopic-select" onchange="dirtplOnChangeTarget()">
<option value="1037">Bulgarian</option>
<option value="512">Chinese (Simplified)</option>
<option value="8">French</option>
<option value="4">German</option>
<option value="16">Italian</option>
<option value="1030">Japanese</option>
<option value="1027">Latvian</option>
<option value="1028">Polish</option>
<option value="64">Portuguese</option>
<option value="2">Russian</option>
<option value="32">Spanish</option>
<option value="1032">Turkish</option>
<option value="128">Ukrainian</option>

Необходимо нажать на элемент. Получается навести на элемент (подсвечивается), а вот нажать никак.
 

    def select_languege(self):
        select_lang_x = '//*/select[@id="trgLang"]/option[@value="32"]'


        iteration = 0
        while iteration < 10:
            time.sleep(0.1)
            try:
                element = self.driver.find_element_by_xpath(select_lang_x)
                #наводим на элемент
                hov = ActionChains(self.driver).move_to_element(element)
                hov.perform()

                self.driver.find_element_by_id("trgLang").select_by_value(select_lang_x)
                self.driver.find_element_by_xpath(select_lang_x).click()
                time.sleep(1)
                return 1
            except (NoSuchElementException, ElementNotVisibleException):
                iteration += 1
        return 0

1. дожидаюсь появления элемента

2. испробовано просто селект, просто кликнуть, навести и кликнуть, навести и селект, и все вместе - навести, селект и нажать (привожу последнее, чтобы видно было как делаю)
в итоге при наведении - элемент выделяется, а выбрать не могу


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 22 мая 2014 - 13:19

У селениума есть стандартный метод выбора необходимого из селекта.

Попробуйте перевести на ваш язык:

Select selDr = new Select(driver.findElements(By.id("trgLang")).get(0));
selDr.selectByVisibleText("Portuguese");

  • 0

#3 Anna_Grace

Anna_Grace

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Anna Grace

Отправлено 22 мая 2014 - 14:07

 

У селениума есть стандартный метод выбора необходимого из селекта.

Попробуйте перевести на ваш язык:

Select selDr = new Select(driver.findElements(By.id("trgLang")).get(0));
selDr.selectByVisibleText("Portuguese");
 
В моем примере "ошибка".
Вместо self.driver.find_element_by_id("trgLang").select_by_value(select_lang_x)
self.driver.find_element_by_id('id="trgLang"').select_by_value(select_lang_x)


Пишу так и вылетает ошибка:
element = self.driver.find_element_by_id("trgLang")
element.select_by_visible_text('Spanish')
File "E:\TestsForPTS10\Object\comdo_box_obj.py", line 28, in select_languege
    element.select_by_visible_text('Spanish')
AttributeError: 'WebElement' object has no attribute 'select_by_visible_text'

А если так, хотя это неправильно, то ошибки не вылетает и при этом ничего конечно не выделяется
self.driver.find_element_by_id('id="trgLang"').select_by_value(select_lang_x)

Чудеса


  • 0

#4 zaiz

zaiz

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Александр

Отправлено 22 мая 2014 - 14:30

Попробуй так.

from selenium.webdriver.support.ui import Select

element = self.driver.find_element_by_id("trgLang")
select = Select(element)
select.select_by_visible_text("Spanish")

  • 0

#5 Anna_Grace

Anna_Grace

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Anna Grace

Отправлено 22 мая 2014 - 15:11

 

Попробуй так.

from selenium.webdriver.support.ui import Select

element = self.driver.find_element_by_id("trgLang")
select = Select(element)
select.select_by_visible_text("Spanish")

этот замечательный способ найден в старом проекте и когда-то он спас

Но в этом шизуха какая-то. Наводит но не выбирает. Даже с Keys.ENTER ничего не выходит

        select_lang_x = '//*/select[@id="trgLang"]/option[@value="32"]'
        time.sleep(1)
        select = Select(self.driver.find_element_by_xpath('//*/select[@id="trgLang"]'))
        select.select_by_visible_text("Spanish")
        self.driver.find_element_by_xpath(select_lang_x).send_keys(Keys.ENTER)
        time.sleep(2)

 


  • 0

#6 Anna_Grace

Anna_Grace

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Anna Grace

Отправлено 22 мая 2014 - 15:24

Ответ (не отредактированный правда):
 

нажатие произошло. почему нужно исследовать

        time.sleep(1)
        select = Select(self.driver.find_element_by_xpath('//*/select[@id="trgLang"]'))
        select.select_by_value(languege)
        time.sleep(2)
        self.driver.find_element_by_xpath(select_lang_x).send_keys(Keys.ENTER)
        time.sleep(1)
        self.driver.find_element_by_xpath(select_lang_x).click()
        time.sleep(2)

Спасибо за помощь!


  • 0

#7 Anna_Grace

Anna_Grace

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Anna Grace

Отправлено 23 мая 2014 - 11:51

Решение. Только таким образом в этой программе можно выбрать элемент. Селект тут не подходит

element = '//*/select[@id="trgLang"]/option[@value="32"]'
element.send_keys(Keys.ENTER)
element.click()

  • 0

#8 Shroet

Shroet

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Великохатский Анатолий


Отправлено 31 октября 2016 - 10:38

А какой это язык обсуждается?


  • 0

#9 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 31 октября 2016 - 10:50

А какой это язык обсуждается?

 

пайтон


  • 0

#10 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 31 октября 2016 - 12:43

А какой это язык обсуждается?

Python

 

 

А какой это язык обсуждается?

 

пайтон

 

:wink:


  • 0

#11 Shroet

Shroet

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Великохатский Анатолий


Отправлено 31 октября 2016 - 17:05

Спасибо за 2 ответа) Подскажите плз как реализовать на java?


  • 0

#12 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 31 октября 2016 - 19:00

Спасибо за 2 ответа) Подскажите плз как реализовать на java?

Select select = new Select(driver.findElement(By.xpath(elXpath)));
select.selectByVisibleText(selVal);
  • 0

#13 Shroet

Shroet

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Великохатский Анатолий


Отправлено 01 ноября 2016 - 12:51

импортировал класс:

 

import org.openqa.selenium.support.ui.Select;

 

написал код:

 

Select select = new Select(driver.findElement(By.xpath("//form[@id='addClientForm']/div/div[6]/div/span/span/span[2]")));

select.selectByVisibleText("Albania"); 
 
но ничего не происходит.

  • 0

#14 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 01 ноября 2016 - 13:13

HTML прикрепи плиз этого select'a.

Хотя можешь не прикреплять наверное ...

Select работает только с элементами у которых есть тег <select>.

У тебя же , похоже, кастомный селектбокс и поэтому придеться искать другие способы(click вызвали вып-ий список -> click нажали на нужное значение)


  • 0

#15 Shroet

Shroet

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Великохатский Анатолий


Отправлено 18 ноября 2016 - 07:53

HTML прикрепи плиз этого select'a.

Хотя можешь не прикреплять наверное ...

Select работает только с элементами у которых есть тег <select>.

У тебя же , похоже, кастомный селектбокс и поэтому придеться искать другие способы(click вызвали вып-ий список -> click нажали на нужное значение)

использую тупой клик:

 

driver.findElement(By.xpath("//span/span/span")).click();
driver.findElement(By.xpath("//div[3]/ul/li[2]")).click();

не работает через клик(

 

<span title="" style="width: 100%;" class="k-widget k-dropdown k-header" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="true" tabindex="0" aria-owns="CountryId_listbox" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-activedescendant="eebec8db-7d60-45b0-910d-acec855f04b8"><span unselectable="on" class="k-dropdown-wrap k-state-default"><span unselectable="on" class="k-input" style="background-color: white;">Canada</span><span unselectable="on" class="k-select"><span unselectable="on" class="k-icon k-i-arrow-s">select</span></span></span><input data-val="true" data-val-number="The field CountryId must be a number." id="CountryId" name="CountryId" style="width: 100%; display: none;" type="text" value="43" data-role="dropdownlist"></span>

<ul unselectable="on" class="k-list k-reset" tabindex="-1" aria-hidden="true" id="CountryId_listbox" aria-live="polite" data-role="staticlist" role="listbox"><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="0">Aaland Islands</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="1">Afghanistan</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="2">Albania</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="3">Algeria</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="4">American Samoa</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="5">Andorra</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="6">Angola</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="7">Anguilla</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="8">Antarctica</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="9">Antigua and Barbuda</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="10">Argentina</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="11">Armenia</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="12">Aruba</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="13">Ashmore and Cartier</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="14">Australia</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="15">Austria</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="16">Azerbaijan</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="17">Bahamas</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="18">Bahrain</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="19">Baker Island</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="20">Bangladesh</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="21">Barbados</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="22">Bassas da India</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="23">Belarus</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="24">Belgium</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="25">Belize</li><li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-


  • 0

#16 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 18 ноября 2016 - 08:06

driver.findElement(By.xpath("//span[text()='select']")).click();
driver.findElement(By.xpath("//ul[@id='CountryId_listbox']/li[text()='Albania']")).click();

а так ?


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных