メモログ

塵が積もって山とならないメモのログ

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のクラスメソッドによってメソッド化されています。同じような手順で好きな属性を追加することができます。

1
2
3
4
5
6
7
8
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とか指定するのに使う)を取得したい場合も同じ要領で簡単にとれるようになります。

1
2
3
4
5
6
7
8
module Watir
class Meta
attributes(:string => [:property])
end
end

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