0

次のコードについて少し具体的な質問があります。

require 'rubygems'
require "watir-webdriver"

webpage = "http://www.portalinmobiliario.com/catalogo/fichas.asp?ProyectoID=4308&tp=1&op=1&iug=306&ca=1&ts=1&mn=2&or=&sf=1&sp=1"
pag_detalle = Watir::Browser.new :firefox
pag_detalle.goto(webpage)

if pag_detalle.frame(:id => 'iFrameFicha').table(:id => 'TableInformacionBasicaProyecto').exists? then

    pag_detalle.frame(:id => 'iFrameFicha').table(:id => 'TableInformacionBasicaProyecto').link(:id => 'btnCotizar').when_present.click

    sleep 5

    if pag_detalle.frame(:id => 'iFrameFicha').table(:id => 'Cotizar').exists? then
        puts "existe"
    end

    pag_detalle.close       
end

このコードは、Firefox を開き、ページを読み込みます。次に、「Cotizar」ボタンをクリックします。その後、フレーム「iFrameFicha」はコンテンツを変更しますが、その要素にアクセスできません。

エラー メッセージは、コンテナー フレームに切り替える必要があることを示していますが、切り替えることができません。

4

1 に答える 1

1

表示されているエラー メッセージは、watir-webdriver (または selenium-webdriver) のバグのようです。簡単なテストから、フレーム内の何かにアクセスしようとすると例外がスローされ要素が存在しないように見えます。これは211号と同じだと思います。この問題の例外は、Chrome を使用しているという理由だけで異なると思います (つまり、この問題で firefox を使用すると、例外が発生します)。

特に、次の行を実行すると:

if pag_detalle.frame(:id => 'iFrameFicha').table(:id => 'Cotizar').exists? then

要素が存在しないため、上記のように (誤って) 例外がスローされます。

ページを見ると、3 つのテーブルがあり、どれも ID を持っていません。

クラス「Cotizar」のテーブルが実際に必要だと思います。

<table class="Cotizar" border="0" width="100%">

つまり、コードは次のようになります。

if pag_detalle.frame(:id => 'iFrameFicha').table(:class=> 'Cotizar').exists? then

しかし、body 要素の ID を「cotizar」にしたい場合もあります (小文字に注意してください)。

<body onload="resize();ExisteMarco();" style="margin:0px;" id="cotizar" class="pageBtn">

その場合、次のことを行う必要があります。

if pag_detalle.frame(:id => 'iFrameFicha').body(:id => 'cotizar').exists? then
于 2013-08-30T13:08:47.707 に答える