如何在python中使用webdriver执行位于外部JavaScript中的函数?
JavaScript用于覆盖JavaScripts内部DateTime对象以提供 改变浏览器时间进行单元测试 我喜欢将sinonfaketimers.js用于此目的。 (但也会选择替代品 像TimeShift.js) 链接:http://sinonjs.org/docs/#clock,https://github.com/plaa/TimeShift-js
所以我编写了以下python代码,它调用JavaScript本身但不是相应的函数:
driver = webdriver.Firefox()
driver.get("http://google.com")
driver.execute_script(open("./sinon_timers.js").read())
# some code here to test shift in time
driver.quit()
据我所知,这个问题正是我需要做的才能做到的 这项工作是使用正确的参数运行相应的JavaScript函数。 我假设传递参数可以通过构建一个合适的字符串来完成,如:
driver.execute_script("function('" + argument_var + "');")
JavaScript sinon_timers.js中的实际函数是:
sinon.timers = {
setTimeout: setTimeout,
clearTimeout: clearTimeout,
setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
setInterval: setInterval,
clearInterval: clearInterval,
Date: Date
};
全长脚本可以在sinonjs.org找到:
http://sinonjs.org/releases/sinon-timers-1.12.1.js
但我不确定在sinon_timers.js中调用函数sinon.timers的语法。 我该怎么做?
更新:
Sainath Motlakunta提出了一个解决方案。不幸的是它不起作用。 但也许我们更接近于解决难题:
driver = webdriver.Firefox()
driver.get("https://duckduckgo.com")
driver.execute_script(open("./sinon_timers.js").read()) # <- is this line important?
driver.execute_script("var clock = sinon.useFakeTimers(12345);")
driver.quit()
这会产生:selenium.common.exceptions.WebDriverException:消息:未定义sinon
完整追溯:
Traceback (most recent call last):
File "/path/sinonJS_test.py", line 47, in <module>
sinon_test()
File "/path/sinonJS_test.py", line 37, in sinon_test
driver.execute_script("var clock = sinon.useFakeTimers(12345);")
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 401, in execute_script
{'script': script, 'args':converted_args})['value']
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 173, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 166, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: sinon is not defined
这篇文章中是否有一些有用的信息,提出完全相同的问题?: https://sqa.stackexchange.com/questions/8838/faking-system-time-date-with-selenium-webdriver
草拟的提议解决方案是:
列表项在测试运行期间注入/添加模拟框架
使用JavaScript执行程序
设置时区
运行测试