Capybara+poltergeistがclick_buttonしてくれない件について

capybara_poltergeist.001

SeleniumでiTunesconnectのクロールをしようとしていたが、やはりCentOS側のCronで動かしたくなったのでSelenium単体ではなくCapybara+Poltergeistで動かすことに変更した。

※今回の目的はRailsのテストじゃないです

しかし、CapybaraのCheatsheetに載っている click_buttonでログインボタンを押してもなんの反応がない。
エラーも出ないけど、とりあえずその後の画面をスクショしてみると、ログインできていない様子。
というわけで、気合でCapybara+Poltergeistでclick_buttonできないボタンをクリックできるようにしたまでの道のり。

ちなみに、ソースほぼそのままに、Seleniumで動かしたら普通に動いた(ログインできた)ので、本当にclick_button だけうまくいってないと思われ。

click_link とかもためしたけど、結果変わらずだったので、
find_button(‘sign-in’).trigger(‘click’)
を試してみた。

すると、
Assertion failed: (_consumed <= scratch_size), function _hb_coretext_shape, file src/hb-coretext.cc, line 764.

というエラーが発生、調べてみると・・

Qt issue when running phantomjs on OSX 10.10 というIssueを発見しました。
今動かしているMacのqtのバージョンを上げて動いたらいいなぁ・・ と期待を抱き始める。

qtのバージョンを上げる

まずqtのバージョンを確認

$qmake -query QT_VERSION
=> 4.8.7

5.3.1以上じゃなきゃダメと書かれていたので希望がでてきました。

macOSの場合は、brewで4系も5系もインストールできるようでしたので
とりあえず何も考えないで5系をインストール。 無事に5.6が入りました。

$ brew install qt5
(略)
==> Summary
/usr/local/Cellar/qt5/5.6.0: 7,288 files, 310.9M

ただ、リンクを4系から5系に張り替えるのは brew link —force だけじゃだめだったので・・

$brew link --force qt5
Linking /usr/local/Cellar/qt5/5.6.0...
Error: Could not symlink bin/lconvert
Target /usr/local/bin/lconvert
is a symlink belonging to qt. You can unlink it:
  brew unlink qt

To force the link and overwrite all conflicting files:
  brew link --overwrite qt5

To list all files that would be deleted:
  brew link --overwrite --dry-run qt5

—overwriteのオプションも付与して再度トライ

$brew link --overwrite --force  qt5
Linking /usr/local/Cellar/qt5/5.6.0... 2262 symlinks created

ちゃんと今度はバージョンが5.6になりました。
$qmake -query QT_VERSION
5.6.0

余談:CentOSの場合
最終的にCentOSで動かそうと思ってたので、こっちもアプデしようとしたんですが gccのバージョンあげなきゃダメとかで、スーパー時間要したので途中で挫折しました (*ノω・*)

参考)
https://wiki.qt.io/How-to-Install-Qt-5-and-Qwt-on-CentOS-6

なお、最新のgccはこちらから
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/

再度動かしてみる

さて、、 どうか?!

、、、

、、、、、、

Assertion failed: (_consumed <= scratch_size), function _hb_coretext_shape, file src/hb-coretext.cc, line 764.

まだエラーが出る。

このQAに書いてある方法をためしてみることに

Can I use homebrew’s qt5 with capybara-webkit?

今回は、Poltergeistを使っていたので、gem fileからpoltergeistとcapybara を削除。
念のため brew remove qt で、qt4系も削除してから入れなおしました。

再度試してみる。
ダメ。まだエラーが出る。

今日はエラーDayです。

poltergeistを入れなおしても、phantomjsがそのままだったらダメなのかも?
とふと疑問に思い、brewでphantomsのバージョンも切り替えてみました。

$ brew remove phantomjs
$ brew install phantomjs
$ brew unlink phantomjs && brew link phantomjs

再度実行・・・・

動いたーーーーー!!!!!!!

というわけで、うまくiTunesconnectにログインできました。

なお、click_buttonでも治ったのかな と見てみたんですが、やはりpoltergeist(phantoms)の場合はうまくclickしてくれてなくてて
find_button(#id).trigger(‘click’) で正常に動きました。

ソース

参考までに、iTunesconnectへログインするところまでのソースです。

require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'

Capybara.run_server     = false
Capybara.current_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app,
                        stdout: nil,
                        phantomjs_options: ['--ignore-ssl-errors=true'])
end

class Itunesconnect
  include Capybara::DSL

  def initialize
    @apple_id = ENV['APPLE_ID']
    @apple_pw = ENV['APPLE_PW']
  end

  def login
    check_params
    visit('https://itunesconnect.apple.com/itc/static/login')

    sleep(6)

    within_frame('authFrame') do
      fill_in 'appleId',  :with => @apple_id
      fill_in 'pwd',      :with => @apple_pw
      find_button('sign-in').trigger('click')
    end
  end
end

まとめ

・Capybara+Poltergeistのclick_buttonが動かない時は find().trigger(‘click’)を使う
・find().trigger(‘click’)が動かない時はqtのバージョンを上げてみる
・qtのバージョンをあげたら、phantomjsとpoltergeistとcapybaraを再度入れなおしてみる
・clickできる(*゚∀゚)

おわり 

 

2016-05-10 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*