Расширение SeleniumLib выдает ошибку имени дублированного ключевого слова - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь написать расширение библиотеки Selenium, чтобы немного ослабить некоторые вещи, и я врезался в стену.Это мой класс Python:

    import uuid
    import time
    import re
    from robot.api.deco import keyword
    from robot.libraries.BuiltIn import BuiltIn
    from SeleniumLibrary import SeleniumLibrary

    class MySeleniumLibrary(SeleniumLibrary):
            # def __init__(self):
            #         BuiltIn().set_library_search_order(self, "SeleniumLibrary")

            @keyword('Select Checkbox')
            def select_checkbox(self, locator):
                    self.wait_until_page_contains_element(locator)
                    elementId = self.get_element_attribute(locator,"id")
                    if elementId=='':
                            elementId = uuid.uuid4()
                            self.assign_id_to_element(locator, elementId)
                    self.execute_javascript('$("#' + elementId + ':not(:checked)").click();')

Когда я запускаю свои тесты, он жалуется при сборке библиотеки:

Creating keyword 'Select Checkbox' failed: Keyword with same name defined multiple times.

И затем, наконец, не удается установить флажок:

Keyword with same name defined multiple times.

У меня есть только mySeleniumLibrary.py, указанный в разделе «Настройки».Я также попытался установить порядок поиска в библиотеке, но это не сработало.У вас есть идеи, как этого добиться?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

На самом деле я нашел решение, как переопределить унаследованный метод SeleniumLibary.Уловка удаляла определенное ключевое слово в строке @keyword.Вот как это выглядит сейчас:

    import uuid
    import time
    import re
    from robot.libraries.BuiltIn import BuiltIn
    from SeleniumLibrary.base import keyword
    from SeleniumLibrary import SeleniumLibrary

    class MySeleniumLibrary(SeleniumLibrary):

            def get_unique_element_id(self, locator):
                    self.wait_until_page_contains_element(locator)
                    elementId = self.get_element_attribute(locator,"id")
                    if elementId=='':
                            elementId = uuid.uuid4()
                            self.assign_id_to_element(locator, elementId)
                    return elementId

            @keyword
            def select_checkbox(self, locator):
                    elementId = self.get_unique_element_id(locator)
                    self.execute_javascript('$("#' + elementId + ':not(:checked)").click();')

=> Когда я сейчас вызываю ключевое слово Select Checkbox, мой метод вызывается вместо оригинального SeleniumLibrary.

0 голосов
/ 18 декабря 2018

Вы импортируете from SeleniumLibrary import SeleniumLibrary.

Который содержит Select Checkbox Ключевое слово, поэтому вы получаете:

Creating keyword 'Select Checkbox' failed: Keyword with same name defined multiple times.

Вы можете просто изменить имя ключевого слова

import uuid
import time
import re
from robot.api.deco import keyword
from robot.libraries.BuiltIn import BuiltIn
from SeleniumLibrary import SeleniumLibrary


class MySeleniumLibrary(SeleniumLibrary):
    # def __init__(self):
    #         BuiltIn().set_library_search_order(self, "SeleniumLibrary")

    @keyword('Select Checkbox Custom')
    def some_name(self, locator):
        self.wait_until_page_contains_element(locator)
        elementId = self.get_element_attribute(locator, "id")
        if elementId == '':
            elementId = uuid.uuid4()
            self.assign_id_to_element(locator, elementId)
        self.execute_javascript('$("#' + elementId + ':not(:checked)").click();')

И тогда ваш Robot Framework Test должен выглядеть примерно так:

*** Settings ***
Library  MySeleniumLibrary.py

*** Test Cases ***
Test Keyword
   Open Browser  hyyp://google.com  chrome
   Select Checkbox Custom  xpath=SomeKidOFXPATHVALUE

И это будет работать, как и ожидалось.Обратите внимание, как работает ключевое слово Open Browser, хотя я не ссылался на SeleniumLibrary в настройках только на сценарий python, который подбирает все ключевые слова.

Для получения дополнительной информации о том, какие методы считаются ключевыми словами, пожалуйста, посмотритеЭто Какие методы считаются ключевыми словами

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