Не удается выполнить пользовательскую функцию утверждения Selenium из файла user-extensions.js при запуске Python RC на сервере Selenium

Я пытаюсь экспортировать скрипт Selenium в Python из Selenium IDE. Однако я использую несколько функций user-extension.js (которые работают в Selenium IDE). После экспорта в Python сгенерированный скрипт выглядит так:

from selenium import selenium
import unittest, time, re

class new_selenium_test(unittest.TestCase):
    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*chrome", "http://localhost/")
        self.selenium.start()

    def test_selenium_assert_something(self):
        sel = self.selenium
        # sel.assert_something("abc=1", "x=126")

    def tearDown(self):
        self.selenium.stop()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

Обратите внимание, что самая интересная строка, где я вызываю свой код расширения пользователя (функция «assert_something», которая отображается на функцию «assertSomething» в моем файле user-extensions.js), закомментирована. Когда я активирую эту строку и запускаю скрипт на сервере Selenium следующим образом:

py.test new-selenium-test.py

Я получаю такую ​​​​ошибку:

AttributeError: 'selenium' object has no attribute 'assert_something'

Есть идеи, почему Selenium IDE комментирует мой пользовательский вызов и почему он не выполняет его из Python?

Обратите внимание, что я запустил сервер Selenium следующим образом:

java -jar selenium-server-standalone-2.0rc2.jar -userExtensions /path/user-extensions.js

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


person nxhtltzw    schedule 19.07.2011    source источник


Ответы (1)


Вам нужно переписать свои пользовательские функции JavaScript на Python, как описано здесь:

http://groups.google.com/group/selenium-users/browse_thread/thread/e927dad7e6cb2944/1712b997934cece5

Он не может подключить объект Python к вашему пользовательскому JS, поэтому он оставляет этот комментарий, чтобы напомнить вам о необходимости реализовать его в Python.

person agf    schedule 19.07.2011
comment
Требует ли моя функция assert вызов do_command на низком уровне или что-то еще? - person nxhtltzw; 19.07.2011
comment
Я не знаю, что вы утверждаете, но если необходимая информация доступна из этой области, вы, вероятно, можете просто написать что-то вроде def assert_something(self, abc, x): return self.assert_equal(abc < x, True), а затем вызвать ее с помощью self.assert_equal(abc=1, x=126), где ваша функция JavaScript закомментирована. В противном случае, если это действительно нужно на Selenium, вам придется создать подкласс, как описано в моей ссылке. Если вы не меняете состояние и не тестируете утверждение до и после, вам не нужно do_command Я не думаю. - person agf; 19.07.2011
comment
Спасибо за информацию. Поскольку моя функция assert_something также использует пользовательский локатор, я предполагаю, что мне также нужно сообщить Python об этом пользовательском локаторе. Как мне это сделать? В Selenium IDE это работает из коробки, потому что я предоставляю Target следующим образом: myprefix=blabla. Я реализовал функцию PageBot.prototype.locateElementByMyprefix, которая выполняет поиск. Как мне вызвать этот конкретный локатор из Python в сочетании с моей функцией assert_something? Кажется, в Интернете ничего не нашел по этому поводу. - person nxhtltzw; 20.07.2011