Selenium-webdriverシリーズチュートリアル(4)--テスト要素の配置方法

5058 ワード

テストオブジェクトの位置決めは、一般的に、さまざまなWeb自動化テストフレームワークまたはツールのコアコンテンツです.
selenium-Webdriverのオブジェクトの位置決め方法は非常に豊富で強力です.一般的に、強力なオブジェクトの位置決めには、次の方法があります.
  • 単一オブジェクトの位置決め方法
  • 複数のオブジェクトの位置決め方法
  • 階層位置決め
  • selenium-Webdriverは、上記の3つの位置決め方式をよくサポートしています.

    個々のオブジェクトの配置


    個々のオブジェクトを配置する場合、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の処理について説明します.