8

コードを同期的に定義できるように、いくつかのファイバーマジックでwebdriver.ioを強化する chimp.js を使用しています。これはコードです:

var c = require('./config');

module.exports = function () {
    this.When(/^I try to login with wrong credentials$/, function () {
        browser.setValue(userNameField, wrongUser);
        browser.setValue(passwordField, wrongPassword);
        browser.click('button[value="Login"]');
    });
    this.When(/^I try to login with the correct credentials$/, function () {
        browser.setValue(userNameField, c.userName);
        browser.setValue(passwordField, c.password);
        console.log('before pressig the button');
        browser.click('button[value="Login"]');
        console.log('logged in');
    });
};

最初のものWhenは問題なく実行されます。2番目Whenも機能しますが、私は見ることができません

ログインした

コンソールで。どちらも同じ Web サイトで実行され、同じボタンをクリックします。2 番目のケースでは、ログインが成功した後、ブラウザーは angular SPA にリダイレクトされます。ここではすべてが正しくロードされますが、それだけです。コールバックは発生しません。

でテストを実行する--debug --log=commandと、これが最後の行であることがわかりました(タイムアウト前)

[1;30m[01:30:18]: [0m [0;35mCOMMAND [0mPOST      "/wd/hub/session/7c334efe-2417-4184-b43c-082ba4441291/element/11/click"

ログレベルを冗長に切り替えて、約 5 分間待機すると、次のエラーが発生しました。

[chimp][selenium.stderr] 01:36:59.561 DEBUG - Executed: [0560aaa14e4cf874afd72336c19e299b, clickElement {id=0.6384125368203968-3}]

[chimp][selenium.stderr] 01:37:02.449 WARN - Exception thrown
org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 10.000
  (Session info: chrome=47.0.2526.73)
  (Driver info: chromedriver=2.19.346063 (38b35413bd4a486d436a9749e090454bc9ff6708),platform=Mac OS X 10.11.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 310.12 seconds
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
System info: host: '<HOST_NAME>', ip: '<IP_ADDRESS>', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11', java.version: '1.8.0_20'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/nc/3cdxbvwj44j_gk1qj24mbr5w0000gn/T/.org.chromium.Chromium.1n3kHd}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=47.0.2526.73, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 0560aaa14e4cf874afd72336c19e299b
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
  at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
  at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
  at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595)
  at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:273)
  at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:483)
  at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement$1.invoke(EventFiringWebDriver.java:332)
  at com.sun.proxy.$Proxy3.click(Unknown Source)
  at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement.click(EventFiringWebDriver.java:345)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:483)
  at org.openqa.selenium.remote.server.KnownElements$1.invoke(KnownElements.java:64)
  at com.sun.proxy.$Proxy2.click(Unknown Source)
  at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:30)
  at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:1)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:745)

[chimp][selenium.stderr] 01:37:02.458 WARN - Exception: timeout: Timed out receiving message from renderer: 10.000
  (Session info: chrome=47.0.2526.73)
  (Driver info: chromedriver=2.19.346063 (38b35413bd4a486d436a9749e090454bc9ff6708),platform=Mac OS X 10.11.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 310.12 seconds
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
System info: host: '<HOST_NAME>', ip: '<IP_ADDRESS>', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11', java.version: '1.8.0_20'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/nc/3cdxbvwj44j_gk1qj24mbr5w0000gn/T/.org.chromium.Chromium.1n3kHd}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=47.0.2526.73, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 0560aaa14e4cf874afd72336c19e299b

[chimp][selenium.stderr] 01:37:02.471 DEBUG - Finished: POST /session/e103e58b-7ac9-4c8d-8f65-1f60295231d9/element/11/click

SPA の最初のページが読み込まれ、データが初期化されるまでに平均 3 ~ 7 秒かかります... (ページが読み込まれていることを示すクロムが停止します)。タイムアウトは10秒に設定されているので、それを増やすことを考えました

module.exports = function () {
    this.BeforeScenario(function () {
        browser.timeout('script', 60 * 1000);
        browser.timeout('page load', 60 * 1000);
    });
};

しかし、それも役に立ちませんでした。私ができること/試すことができるアイデアはありますか?

もう一度明確にするために、ログイン ページは単純な静的なサーバー側でレンダリングされた HTML です。ユーザーがログインすると、Angular 1.4 に基づく SPA にリダイレクトされます。SPA にリダイレクトされず、ログイン ページに戻るため、間違った資格情報でログイン ボタンを押してもおそらく機能します。

すべてのテストは、Mac OS X El Capitan の chrome で実行されます。

アップデート:

今、それは一度働いた。その後、ウェブサイトをリロードすると、スクリプトが動かなくなった場合に備えて、スクリプトが実行され続けることに気付きました。

問題のページは次のように機能します。

  • /ページがアクセスされ、角度が初期化されます
  • ui-router ルート#/defaultroute
  • コントローラが初期化され、いくつかの初期データがダウンロードされます
  • 新しいコントローラーは内部で初期化され、ng-repeatさらに多くのデータをダウンロードします

ええ、かなりの量のデータがダウンロードされ、ページ全体が表示されるのを待っています。もしかしたら、それが Chimp.js や webdriver.io に問題を引き起こしているのでしょうか?

browser.click(...);もちろん、 からへの切り替えもbrowser.key(['Enter']);機能しません。スタックしてブラウザをリロードするという同じ問題が修正されます。silenium では、ページの読み込みが実際に完了していないようです。そのため、ページをリロードすると修正されます。それを修正する方法はありますか?

ところで、これに関する問題も開いています: https://github.com/xolvio/chimp/issues/165

更新 2:

Firefox と PhantomJS では動作しますが、Safari はまったく動作しません。

この時点で、既知のバグである場合、エラーがどこにあるかを知りたいだけかもしれません...

4

1 に答える 1

3

問題を絞り込むために私がすること:

  1. 単一の失敗したテストを分離して実行します (他のテストが何らかの影響を与えていないことを確認するため)

  2. ボタンをクリックする代わりに、失敗したテストの最終 (リダイレクトされた) URL に直接アクセスします。たとえば、(smth like browser.get('#/defaultroute'));

  3. angularページが読み込まれていない/同期されていないとして扱われる可能性があるページが実行されないかどうかを確認しますpolling(連続的な setTimeout、間隔) (更新時に動作するため、疑わしい)

于 2015-12-07T19:38:43.433 に答える