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 回答