Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Selenium2Library Аналог selectByVisibleText(value)


(Александр Шиповалов) #1

Добрый день, коллеги, начал осваивать Robot Framework и столкнулся с такой проблемой, не могу найти аналога для построения такой конструкции

        Select someSelect = new Select(driver.findElement(By.id("select")));
        someSelect.selectByVisibleText(value);

Сталкивался кто нибудь с такой проблемой? Понимаю, что наиболее разумно дописать библиотеку - но немного боязно и Питон знаю плохо, да RF еще не очень


(vmaximv) #2
def select_from_list_by_label(self, locator, *labels):

https://github.com/rtomac/robotframework-selenium2library/blob/master/src/Selenium2Library/keywords/_selectelement.py


(Mykhailo Poliarush) #3

Ну а я просто добавлю еще парочку ссылок на документацию http://rtomac.github.io/robotframework-selenium2library/doc/Selenium2Library.html, где можно искать кейворды. В принципе большинство кейвордов уже реализовано. Так что надо просто найти нужный и писать самому ничего не надо.

А еще некоторой функциональности все равно не хватает, это касается ActionChain. Так вот тогда может помочь вот эта библиотека, которая расширяет selenium2library https://github.com/hmalphettes/robotframework-selenium2library-extensions и реализует следующие кейворды:

Chain Sleep
Chain Click
Chain Click And Hold
Chain Drag And Drop
Chain Key Up
Chain Key Down
Chain Move By Offset
Chain Move To Element
Chain Move To Element With Offset
Chain Release
Chain Send Keys
Chain Send Keys To Element 

(Александр Шиповалов) #4

Еще такой вопрос - а можно ли как то в стандартной Open Browser - включить синтезированные события?


(Mykhailo Poliarush) #5

Увы такого нет написанного, надо дописывать самостоятельно.


(Александр Шиповалов) #6

Смущает вот эта строчка в документации к библиотеке. К команде open browser
This is useful for doing things like specify a proxy server for internet explorer or for specify browser and os if your using saucelabs.com. ‘desired_capabilities’ can also be a dictonary (created with ‘Create Dictionary’) to allow for more complex configurations.


(Александр Шиповалов) #7

select_from_list_by_label - что то не хочет работать с Select-ом вида

<select id="all-filter-col" class="src-list" size="10" multiple="multiple">
   <option value="MAI_EVENT_CODE">Maintenance event number</option>
   <option value="MAI_ASSET_FAMILY_CODE">Engine family</option>
   <option value="MAI_ASSET_VARIANT_CODE">Engine variant</option>

(Александр Шиповалов) #8

Ах да, естественно что тест-дизайнер, не хочет писать, value, а пишет отображаемый текст


(vmaximv) #9

Если не работает, то это не проблема Selenium2Library, по крайней мере ее актуальной версии.

    def select_from_list_by_label(self, locator, *labels):
     
        if not labels:
            raise ValueError("No value given.")
        items_str = "label(s) '%s'" % ", ".join(labels)
        self._info("Selecting %s from list '%s'." % (items_str, locator))

        select = self._get_select_list(locator)
        for label in labels:
            select.select_by_visible_text(label)

(Mykhailo Poliarush) #10

А что тебя тут смущает? В чем вопрос?


(Mykhailo Poliarush) #11

Код вызова в студию, плиз


(Александр Шиповалов) #12

Сорри, что пошло такое разделение - попробовал записать через Selenium IDE

 # ERROR: Caught exception [ERROR: Unsupported command [addSelection | id=all-filter-col | label=Maintenance event source reference]]

Что касается браузера, то решил сделать так:

${desire_capabilites}	Create Dictionary	nativeEvents	False	
Open Browser	https://web/	firefox	ff_profile_dir=${profile}	desired_capabilities=${desire_capabilites}

(Александр Шиповалов) #13

Да эта ошибка в Selenium IDE, записывается при простом клике по option у Select-а и при переводе на Python


(vmaximv) #14

Вы определитесь:
Сначала вы спрашиваете как работать с ддл в Selenium2Library RobotFramework.
Потом пишете что нужные кейворды не работают.
Потом про то, что IDE не портирует работу с ддл в Python+WebDriver.

Все это как-то сбивает с толку.


(Mykhailo Poliarush) #15

Поддерживаю @vmaximv. @alshipovalov распиши более подробно, что у тебя осталось и что не получается и не забудь, что чем больше информации тем лучше http://automated-testing.info/faq а также не мешай все в одну кучу. Если появляется какие-то другие проблемы, то лучше создавать отдельные топики.


(Александр Шиповалов) #16

Сначала вы спрашиваете как работать с ддл в Selenium2Library RobotFramework

Это где же я это спрашивал, я спросил как можно портировать кусок кода написанный на Java, для Python.
Поясню, что я имею в виду:

  1. Есть кусок кода, написанный на Java и работающий для определенного Select-а
  2. Есть код Python библиотеки, который не работает для данного Select
  3. Есть Selenium IDE, которая может записать и портировать работу с Select для Java, но не может для Python
    Пункт 3 был выполнен мной исключительно в целях эксперимента.

(Александр Шиповалов) #17

Что бы тема имела логическое завершение. Не смотря, на то, что ошибка валилась при работе с Select-ом, на самом деле, выбор option проходил удачно - просто не отрабатывала команда Click button (которая и должна была добавить option в новый Select). Замена на Click Element - решила проблему.