我有一个嵌套了表层的链接,并且大部分表都没有任何id。我所拥有的链接位于包含id的表下。无论如何我都无法点击链接。这是html。请帮忙。谢谢!
<html
<frame src="my_frame"
<html
<table style="height:28px;"
<table style="height:28px;"
.
.
<table style="height:28px;"
<table id="tblButtons"
<td id="" title="" onmouseover="this.className = 'hdrBtn hdrBtnover';" onmouseout="this.className = 'hdrBtn';" onmousedown="this.className = 'hdrBtn hdrBtndown';" onmouseup="this.className = 'hdrBtn hdrBtnover';" background="../images/header/barbkg.gif" onclick="if(pageIsReady())parent.ordersummaryform.SubmitIt('OK');" class="hdrBtn"><a href="#" id="" class="linkForTabbingOnly" style="color:009900">Desktop</a></td>
<a href="#" id="" class="linkForTabbingOnly" style="color:009900">Desktop</a>
我尝试过使用xpath,如下所示:
link( :desktop_header, :xpath => "a[@href='#' and @class='linkForTabbingOnly' and starts-with(text(),'Desktop')]")
和
link( :desktop_header, :xpath => "//table[@id='tblButtons']//a[@href='#' and @class='linkForTabbingOnly' and starts-with(text(),'Desktop')]")
我也试过
我试过
table(:table_button) {frame_element(:src => 'quotesummary_buttons.cfm?QuoteFormat=').table_element(:id => 'tblButtons',:href => '#', :class => 'linkForTabbingOnly' ) }
def click_desktop()
table_button_element.cell_element(:class => 'hdrBtn')
.child
.link_element(:text => 'Desktop')
.click
end
并使用click_desktop单击链接但出现错误 NoMethodError:未定义的方法`frame_element&#39;对于#
答案 0 :(得分:2)
基于您的部分HTML和尝试,我猜测问题的关键是框架:
frame_element
不存在定义框架。Page-Object gem wiki page对如何使用框架有很好的解释。
提供的HTML似乎有点零散,因此您可能需要对以下建议进行一些调整。但是,希望通过维基页面信息和一些更具体的示例,您可以解决您的问题。
第一步是确保链接访问者被告知要查看框架:
class MyPage
include PageObject
in_frame(:src => 'my_frame') do |frame|
link(:desktop_header, :href => '#', :class => 'linkForTabbingOnly', :text => /^Desktop/, :frame => frame)
end
end
除非框架中有多个带有文本&#34;桌面&#34;的链接,我可能会建议将链接定位器简化为文本 - 即href和类属性似乎不会添加任何内容。
class MyPage
include PageObject
in_frame(:src => 'my_frame') do |frame|
link(:desktop_header, :text => 'Desktop', :frame => frame)
end
end
如果有多个&#34;桌面&#34;页面上的链接,但在&#34; tblButtons&#34;中只有一个这样的链接。表,然后你可以使用嵌套。在下面的示例中,表通过使用:frame定位器位于框架的范围内。然后,通过使用块和嵌套元素方法将链接放在表中。
class MyPage
include PageObject
in_frame(:src => 'my_frame') do |frame|
table(:table_buttons, :id => 'tblButtons', :frame => frame)
link(:desktop_header) { table_buttons_element.link_element(:text => 'Desktop') }
end
end
虽然上述示例的概念应该有效,但很有可能它们会失败并提供部分HTML。您可能需要进行一些更改:
in_frame(:src => 'my_frame')
中的正确:src(或其他定位器)正确无误。frame
元素中有html
元素似乎不常见。如果我没记错的话,只允许在frameset
元素中使用帧。您实际上可能正在处理iframe
而不是frame
。如果是这样,您需要将in_frame
方法更改为in_iframe
。请注意,无论哪种方式,对于框架中的元素,定位器仍然只是:frame
。答案 1 :(得分:0)
一般来说,您应该尽量避免使用xpath。它非常脆弱,你的代码很快就会崩溃!
尝试嵌套元素,例如:
@browser.table(:id, /Buttons/).link(:class, /link/)
我认为通过阅读defining different elements.的阅读,你真的会受益。这非常有帮助!