2012-12-04 38 views
0

因此,以我的燈箱公認的,我如何訪問它的內部?如何在水燈箱/ fancybox中找到項目與水豚

當我鍵入:

within("div.fancybox-wrap.fancybox-desktop.fancybox-type-iframe.fancybox-opened") do 
    within(:xpath, "//table[@id='small_calendar'][0]") do 
     page.find('td', :text => '5').click 
    end 
end 

對於

<table id="small_calendar"> 

我得到...

Unable to find xpath "//table[@id='small_calendar'][0]" (Capybara::Element 
NotFound) 

修改搜索....

sleep(10) 
within("div.fancybox-wrap.fancybox-desktop.fancybox-type-iframe.fancybox-opened") do 
    within_frame('fancybox-frame') do 
     #within(:xpath, ".//table[@id='small_calendar'][0]") do 
      page.find(:xpath, ".//table[@id='small_calendar'][0]/td[@text='5']").click 
     #end 
    end 
end 

讓我這個錯誤...

findElements execution failed; 
    Element does not exist in cache (Selenium::WebDriver::Error::StaleElement 
ReferenceError) 
+0

請問您可以添加頁面的html - 頁面和iframe? –

回答

0

明白了!

問題似乎是幀內和xpath不相處。一旦我從等式中刪除它,我就得到了期望的結果。

within_frame('fancybox-frame') do 
    #within(:xpath, ".//table[@id='small_calendar'][0]") do #chokes 
    within(all("table[id='small_calendar']").first) do #works! 
     #page.find(:xpath, ".//table[@id='small_calendar'][0]/td[@text='5']").click #chokes 
     page.find("td[id='2013_0_6']").click #works! 
    end 
end 
+1

我認爲這是「[0]」,它弄亂了xpath中的內部,我相信默認情況下,它會選擇第一個匹配元素,所以你不需要它,這是爲什麼我在原始答案中刪除了它。:) –

1

如果元素是一個框架之內,你必須明確地指出使用within_frame方法:

within_frame('fancybox-frame') do 
    within(:xpath, "//table[@id='small_calendar']") do 
     page.find('td', :text => '5').click 
    end 
end 
+0

關閉!我現在看到...'findElements執行失敗; 元素在緩存中不存在(Selenium :: WebDriver :: Error :: StaleElement ReferenceError)' – TangibleDream

+0

'findElements execution failed;元素在緩存中不存在(Selenium :: WebDriver :: Error :: StaleElement ReferenceError)' – TangibleDream

+1

看起來你不能在另一個'within'內使用'within_frame'方法。嘗試刪除內部(「div.fancybox-wrap ...」)部分 –