4

Googleの統合テストでは、Googleの場所のオートコンプリートの結果と対話するのに苦労しています。前のコードでGoogleプレイスのオートコンプリート結果のクリックをシミュレートするにはどうすればよいですか?

var placeSelector = '.pac-container .pac-item:first-child'; 

exports.runTest = function(test) { 
    casper.waitForSelector('input.street-address'); // wait for page to load 
    casper.sendKeys('input.street-address', 'fake address here', {keepFocus: true}); 

    casper.waitUntilVisible(placeSelector); 

    casper.then(function() { 
     casper.click(placeSelector); // THIS DOES NOT DO ANYTHING 

     // if its possible to trigger the event in the context of the page, I 
     // could probably do so. However, I've scoured google's docs and cannot find the 
     // event that is fired when a place is clicked upon. 
     casper.evaluate(function() { 
      //google.maps.places.Autocomplete.event.trigger(???); 
     }); 
    }); 

    var formVal; 
    casper.then(function() { 
     formVal = casper.evaluate(function() { 
      return $('input.street-address').val(); 
     }); 
    }); 
}; 

、そこには結果がなく、入力が移入されていないも示唆結果が隠されています。

オートコンプリート入力にアドレスを入力して、提案された結果の1つをクリックする操作をシミュレートするにはどうすればよいですか?

私は同様の質問を渡って来ているいくつかの資源:

How to "simulate" a click on a Google Maps Marker?

https://developers.google.com/maps/documentation/javascript/events?csw=1#EventsOverview

+1

完全なテストスクリプトを提供できますか?また、どのバージョンのPhantomJSを使用していますか? –

+0

@ArtjomB。私はcasperjs 1.1.1を使用しています。私はPhantomJS 2.1.7を信じています。完全なテストスクリプトは、htmlページで、セレクタ 'input.street-address'で入力に初期化されたGoogleオートコンプリートとなります。 – Feek

答えて

2

私はこの同じ質問をしました。場所オートコンプリートのソースコードの中を掘り後、私はあなたのCasperJSテストに含める、または必要に応じて変更することができ、以下、思い付いた:

https://gist.github.com/jadell/8b9aeca9f1cc738843eca3b4af1e1d32

casper.then(function() { 
    casper.sendKeys('input.street-address', 'fake address here', { keepFocus: true }); 
    casper.page.sendEvent('keydown', 0); 
    casper.page.sendEvent('keyup', 0); 
}); 
casper.waitUntilVisible('.pac-container .pac-item', function() { 
    casper.page.sendEvent('keydown', casper.page.event.key.Down); 
    casper.page.sendEvent('keydown', casper.page.event.key.Enter); 
}); 

基本的には、しようとしないでください結果をマウスでクリックしてシミュレートし、下矢印キーとEnterキーを使用して最初の結果を選択します。

オートコンプリートは、sendKeysメソッドが送信しない、キーダウンおよびアップイベントをトリガーする前にリッスンするため、sendEventでいくつかのnullキーイベントを送信します。次に、resutlsコンテナが表示されるまで待ってから、下矢印キーとEnterキーイベントを送信して最初の結果を選択します。

+0

私は追加する必要がありました: casper.wait(1000関数(){; casper.page.sendEvent( 'keyUpイベント'、0); casper.page.sendEvent( 'KEYDOWN'、0)})。 私の場合はそれを働かせる! – F3L1X79

2

オートコンプリートの入力要素が非常にクリックがあります、それを送信、添付のクリックイベントを持っていません無効。私はオートコンプリートの結果の実際のクリックをシミュレートすることができませんでした

casper.page.sendEvent('keydown', someKey); 
+0

回答ありがとうございます。しかし、入力ボックスに入力しようとしていません。それは私がすでに達成したことです。私は提案された結果の1つをクリックするのに苦労しています。 – Feek

0

が、しかし、下矢印を利用して同じ結果を達成し、キー押下を入力することが可能であった: のKeyDownイベントをお試しください。オートコンプリートの入力にあなたのテキストを入力し、フォーカスを維持することを確認された後

、単純に次のコード行を含めると、あなたの結果が適切にGoogleが設定されますがこのコードは

casper.then(function() { 
    casper.page.sendEvent('keypress', casper.page.event.key.Down); 
    casper.page.sendEvent('keypress', casper.page.event.key.Enter); 
}); 

casper.thenEvaluate(function() { 
    $(inputSelector).blur(); 
}, placeSelector, inputSelector); 

オートコンプリートAPIをします置きます最初のオートコンプリート結果を選択します。

関連する問題