メモログ

watir-webdriver:要素で使用できる属性を増やす

watir-webdriver では、たとえば b.link(:id,'memolog').href みたいなかたちで要素を特定させて、特定した要素の属性を取得することができます(詳細はAPIなどを参照)。ただW3Cで規定されている属性しかメソッド化されていないので、たとえば twitter の t.co のリンクの元 URL の属性(data-expanded-url)などは通常では取得することができません。

html.slice(/data-expanded-url=\\"(\[^"\]+)\\"/,1)みたいにして html から slice することはできますけど、やはりlink.data-expanded-urlみたいなかたちで取得できる方が良い

そこで要素で使用できる属性を追加するという話。属性は module Watir の中の class で attributes のクラスメソッドによってメソッド化されています。同じような手順で好きな属性を追加することができます。

require 'watir-webdriver'

module Watir
  class Anchor
    attributes(:string => [:'data-expanded-url'])
  end
end

これで link のメソッドに data-expaneded-url が追加されます(メソッド名にハイフンが含まれると、その部分がマイナスの演算子として認識されてしまうので、実際には link.send('data-expanded-url') みたいな形で使用するかなんとかにしないといけませんが)。

meta タグの property 属性(og:image とか指定するのに使う)を取得したい場合も同じ要領で簡単にとれるようになります。

module Watir
  class Meta
    attributes(:string => [:property])
  end
end

b.meta(:property,'og:image').content

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。