2017-02-08 4 views
0

サイトにアクセスする前にジオロケーションを設定したいと思います。どうやってやるの?capybaraとphantomjsでジオロケーションを指定/上書きする方法

Capybara.default_driver = :poltergeist 
driver_name = "poltergeist_#{rand 1_000_000}" 
Capybara.run_server  = false 
Capybara.current_driver = driver_name 
Capybara.default_wait_time = 10 
opts = {} 
Capybara.register_driver driver_name do |app| 
    opts = { :js_errors => true, :phantomjs_options => ['--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1'], :timeout => 90 } 
    Capybara::Poltergeist::Driver.new app, opts 
end 
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2' 
Capybara.current_session.driver.headers = { 'User-Agent' => user_agent} 
Capybara 
browser = Capybara 
# now my attempt to set geolocation, which is unsuccessful. 
    browser.page.execute_script "navigator.geolocation.getCurrentPosition = function(success, failure) { success({coords: {latitude: 25.455755, longitude: -80.511565}, timestamp: Date.now()}); }" 

しかし、私は今、位置認識サイトに向かう場合、私は私の地理的位置に関連するデータを参照してくださいいけない次のよう

小さなスクリプトの例です。したがって、ジオロケーションのオーバーライドは失敗します。

ジオロケーションを設定する正しい方法は何ですか?

+0

サイトでは、ユーザーのジオロケーションを取得するためにclientside JSの 'geolocation' APIを使用していますか? 'alert'または' console.log'を 'getCurrentPosition'関数に投げて、本当に呼び出されているかどうかを調べる方法があります。 私は1つは、サーバー側でIPアドレスの参照をgeolocationに使用する傾向があるため、このメソッドは機能しません。 –

答えて

0

execute_scriptでこれを実行すると、ページが読み込まれた後に実行されます(通常、ブラウザがジオロケーションをサポートしているかどうかがチェックされています)。代わりに、Pollgegeist/PhantomJSの拡張機能を使用してジオロケーションを模擬したいとします。ここでは、これを行う方法を説明する良い投稿です - http://collectiveidea.com/blog/archives/2014/01/21/mocking-html5-apis-using-phantomjs-extensions

+0

答えをありがとう。私はそれを読んで、それが私の問題を解決するなら、それがまだ最高の答えであるならば、答えを受け入れることができます:)。 – umar

関連する問題