【问题标题】:Cannot execute custom Selenium assert function from user-extensions.js file, when running Python RC against Selenium server在针对 Selenium 服务器运行 Python RC 时,无法从 user-extensions.js 文件执行自定义 Selenium 断言函数
【发布时间】:2023-03-09 03:21:01
【问题描述】:

我正在尝试将 Selenium 脚本从 Selenium IDE 导出到 Python。我正在使用一些 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”,映射到我的 user-extensions.js 文件中的函数“assertSomething”)被注释掉了。当我激活该行并像这样针对 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

感谢您的帮助!

【问题讨论】:

    标签: python selenium selenium-ide attributeerror user-extensions.js


    【解决方案1】:

    您需要在 Python 中重写您的自定义 JavaScript 函数,如下所述:

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

    它无法将 Python 对象连接到您的自定义 JS,因此它会在此处留下注释以提醒您在 Python 中实现它。

    【讨论】:

    • 我的“assert”函数是否需要低级别的“do_command”调用,或者其他什么?
    • 我不知道你在断言什么,但如果可以从这个范围内访问必要的信息,你可能只需要写类似def assert_something(self, abc, x): return self.assert_equal(abc < x, True) 然后用self.assert_equal(abc=1, x=126) 从你的JavaScript 函数被注释掉。否则,如果它真的需要在 Selenium 上,则必须按照我的链接中所述进行子类化。除非您更改状态并在前后测试断言,否则您不需要 do_command 我不认为。
    • 感谢您的信息。由于我的 assert_something 函数也使用自定义定位器,我假设我必须让 Python 也知道这个自定义定位器。我该如何做到这一点?在 Selenium IDE 中,这是开箱即用的,因为我提供了这样的目标:“myprefix=blabla”。我已经实现了一个 PageBot.prototype.locateElementByMyprefix 函数来进行查找。那么,如何结合我的 assert_something 函数从 Python 调用这个特定的定位器?似乎在互联网上找不到任何关于此的内容。
    猜你喜欢
    • 2011-10-11
    • 2012-06-30
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2013-04-17
    相关资源
    最近更新 更多