Selenium-webdriverシリーズチュートリアル(4)--テスト要素の配置方法
5058 ワード
テストオブジェクトの位置決めは、一般的に、さまざまなWeb自動化テストフレームワークまたはツールのコアコンテンツです.
selenium-Webdriverのオブジェクトの位置決め方法は非常に豊富で強力です.一般的に、強力なオブジェクトの位置決めには、次の方法があります.単一オブジェクトの位置決め方法 複数のオブジェクトの位置決め方法 階層位置決め selenium-Webdriverは、上記の3つの位置決め方式をよくサポートしています.
個々のオブジェクトを配置する場合、selenium-Webdriverは、次のプロパティを使用して要素を配置することをサポートします.
位置決めされたオブジェクトにclassプロパティがある場合はclassまたはclass_を使用できます.nameでオブジェクトを配置します.
次の例では,sosoトップページ上のclassが「new」であるspanを位置づけた.
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
位置決めを行う前にhighlightメソッドを動的に定義し、id属性のあるページ要素をハイライト表示する役割を果たします.
次のコードでは、idプロパティを使用してsosoトップページの検索入力ボックスを位置決めする方法を示します.
idを使用して正しい要素にナビゲートすると、highlightメソッドはその要素を赤でハイライト表示し、コードが正常に動作しているかどうかを検証することもできます.
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
公式文書によると、Selenium-WebDriverはcss 3文法をサポートしているという.これはjqueryを使用している学生にとって良いニュースに違いない.
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
linkオブジェクトを配置するときにlinkとlink_を使用できます.textプロパティ;
またtag_を使用することもできますnameプロパティは任意の要素を位置決めします.
find_Elementsメソッドは、オブジェクトのセットを特定できます.たとえば、
上のコードは、ページ上のすべてのlinkオブジェクトの配列を返します.
次のコードでは、ページ上のすべてのbuttonオブジェクトを選択する方法を示します.
階層の位置決めの考え方は、親オブジェクトを位置決めしてから、親オブジェクトから選択する子孫要素を正確に特定することです.
階層の配置一般的な適用シーンでは、選択する要素に直接配置することはできませんが、親要素は比較的配置しやすく、親要素を配置してサブ要素を巡って必要なターゲット要素を選択するか、要素の下のすべてのサブ要素を配置する必要があります.
次のコードでは、idがbmのdivの下にあるすべてのlink要素を選択し、hrefをすべて印刷する方法を示します.
このセクションでは、Selenium-WebDriverが要素を配置する一般的な方法について説明します.次のセクションでは、Selenium-WebDriverによるframeの処理について説明します.
selenium-Webdriverのオブジェクトの位置決め方法は非常に豊富で強力です.一般的に、強力なオブジェクトの位置決めには、次の方法があります.
個々のオブジェクトの配置
個々のオブジェクトを配置する場合、selenium-Webdriverは、次のプロパティを使用して要素を配置することをサポートします.
:class => 'class name',
:class_name => 'class name',
:css => 'css selector',
:id => 'id',
:link => 'link text',
:link_text => 'link text',
:name => 'name',
:partial_link_text => 'partial link text',
:tag_name => 'tag name',
: xpath => 'xpath',
classまたはclass_の使用nameによる位置決め
位置決めされたオブジェクトにclassプロパティがある場合はclassまたはclass_を使用できます.nameでオブジェクトを配置します.
次の例では,sosoトップページ上のclassが「new」であるspanを位置づけた.
require 'rubygems'
require 'selenium-webdriver'
require 'pp'
url = %q{http://www.soso.com/}
dr = Selenium::WebDriver.for :ie
dr.navigate.to url
sleep 1
new_icon = dr.find_element(:class => 'ico_new')
puts new_icon.tag_name # ---> span
idプロパティを使用した位置決め
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
位置決めを行う前にhighlightメソッドを動的に定義し、id属性のあるページ要素をハイライト表示する役割を果たします.
次のコードでは、idプロパティを使用してsosoトップページの検索入力ボックスを位置決めする方法を示します.
require 'rubygems'
require 'selenium-webdriver'
require 'pp'
Selenium::WebDriver::Element.module_eval do
def highlight
e_id = self.attribute('id')
puts "#{e_id} = e_id"
js = <<JS
document.getElementById("#{e_id}").style.border = "3px solid red"
JS
@bridge.executeScript(js) if e_id
end
end
url = %q{http://www.soso.com/}
dr = Selenium::WebDriver.for :ie
dr.navigate.to url
sleep 1
s_input = dr.find_element(:id => 's_input')
#
# s_input = dr['s_input']
s_input.highlight
idを使用して正しい要素にナビゲートすると、highlightメソッドはその要素を赤でハイライト表示し、コードが正常に動作しているかどうかを検証することもできます.
nameプロパティを使用した位置決め
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
# soso
s_input = dr.find_element(:name => 'w')
cssプロパティを使用した位置決め
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
公式文書によると、Selenium-WebDriverはcss 3文法をサポートしているという.これはjqueryを使用している学生にとって良いニュースに違いない.
# css soso
s_input = dr.find_element(:css => '#s_input')
xpathを使用した位置決め
sosoトップページの検索入力ボックスのhtmlコードは以下の通りです.
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
# xpath soso
s_input = dr.find_element(:xpath => %Q{//input[@id='s_input' and @name='w']})
別の方法で位置決め
linkオブジェクトを配置するときにlinkとlink_を使用できます.textプロパティ;
またtag_を使用することもできますnameプロパティは任意の要素を位置決めします.
複数の要素の配置
find_Elementsメソッドは、オブジェクトのセットを特定できます.たとえば、
# link
all_links = driver.find_elements(:tag_name, 'a')
all_links.each do {|l| puts l.class} # ---> Selenium::WebDriver::Element
上のコードは、ページ上のすべてのlinkオブジェクトの配列を返します.
次のコードでは、ページ上のすべてのbuttonオブジェクトを選択する方法を示します.
all_buttons = driver.find_elements(:tag_name, 'input').select do |i|
i['type'] == 'button'
end
階層の配置
階層の位置決めの考え方は、親オブジェクトを位置決めしてから、親オブジェクトから選択する子孫要素を正確に特定することです.
階層の配置一般的な適用シーンでは、選択する要素に直接配置することはできませんが、親要素は比較的配置しやすく、親要素を配置してサブ要素を巡って必要なターゲット要素を選択するか、要素の下のすべてのサブ要素を配置する必要があります.
次のコードでは、idがbmのdivの下にあるすべてのlink要素を選択し、hrefをすべて印刷する方法を示します.
links = dr.find_element(:id, 'bm').find_elements(:css => 'a')
links.each do |l|
puts l['href']
end
このセクションでは、Selenium-WebDriverが要素を配置する一般的な方法について説明します.次のセクションでは、Selenium-WebDriverによるframeの処理について説明します.