前回の続きです これまでの目次 その1 … 基本編 その2 … waitやwindow_handle 要素が出現するのを待つ 通常でも、手続き的に連続して書いておけばページロードがある程度完了するまでは待ってくれる。 しかし、xhrでの読み込みやスクリプトによるDOMの改変、展開などである要素が出現するのを明示的に待つ必要がある場合もある。 そんなときは Selenium::WebDriver::Wait を使う wait = Selenium::WebDriver::Wait.new(:timeout => TIMEOUT) wait.until do driver.find_element(….).displayed? …
Read MoreSelenium WebDriverで遊ぼう Selenium WebDriverがあれば、httpを直接喋ったり、mechanizeやnokogiriで遊ぶより以下のことが出来て嬉しい。 javascriptを使ったレンダリングなどに対応できる javascriptをコールできる chromeなどブラウザの挙動そっくりそのままを再現できる Selenium WebDriver on Ruby で、いろいろ遊んだり、今流行の(多分嘘)RPAしたりやっていくぞ! これまでの目次 その1 … 基本編 その2 … waitやwindow_handle 準備 これはごく普通に gem install selenium-webdriver で …
Read MoreRails.cacheにmodelをキャッシュする Rails.cache などを使い、ActiveRecordのモデルのインスタンスをキャッシュ(==シリアライズして保管)する、ということがある。主にパフォーマンスチューニングのために、DBクエリを減らそう、というような場合。 そのモデルが、has_many などの関連(association)を持っている場合、単純にキャッシュにwriteすると、これらの関連のキャッシュが書き込まれてしまう。一件問題なさそうに見えるが、たとえば、関連先のモデルに対して直接アクセスしたりして内容が書き換わる可能性があったりして不都合なこともある。 そういった場合には、モデルをシリアライズ(Ruby的 …
Read More(Qiita repost) なにこれ (tl;dr) mysql5.7にて、VARCHAR(10)とVARCHAR(30000)ではINSERTなどで差が出る、という話を聞いたのと、よく言われている TEXT型は遅い、という話をベンチマークしてみたら少なくともINSERTは全然差がないことがわかった、という話 ただしTEXT型は検索する場合は当然差が出て来るが、割愛。 測定用スクリプト con = ActiveRecord::Base.connection # utf8mb4が検証環境のため 65535/4=16383 length_set = [255, 4096, 16383, :text] string_set = …
Read More