1

Pythonでwebdriverを使用して外部JavaScriptにある関数を実行するにはどうすればよいですか?

JavaScript は、JavaScript の内部 DateTime オブジェクトを上書きして、単体テスト用に変更されたブラウザー時間を与えるために使用されます。私はこの目的のために sinonfaketimers.js を使用するのが好きです。(ただし、TimeShift.js などの代替手段も使用できます) リンク: http://sinonjs.org/docs/#clockhttps://github.com/plaa/TimeShift-js

そこで、JavaScript 自体を呼び出しますが、それぞれの関数を呼び出す次の Python コードを作成しました。

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

スケッチされた提案されたソリューションは次のとおりです。

  1. テスト実行中にモッキング フレームワークをリスト アイテムに挿入/追加する

  2. JavaScript Executor を使用して Date オブジェクトをモックする

  3. タイムゾーンを設定する

  4. テストを実行する

4

0 に答える 0