我有一个从div级联的span元素,看起来就像一个带有文本的按钮"好的,得到它。" 。它的HTML如下:
<span class="dijit dijitReset dijitInline defaultButton xwtButton xwt-TextButton xwt-TextButtonFocused dijitFocused" role="presentation" widgetid="xwt_widget_form_TextButton_2">
<span class="dijitReset dijitInline dijitButtonNode" role="presentation" data-dojo-attach-event="ondijitclick:__onClick">
<span id="xwt_widget_form_TextButton_2" class="dijitReset dijitStretch dijitButtonContents" aria-labelledby="xwt_widget_form_TextButton_2_label" role="button" data-dojo-attach-point="titleNode,focusNode" tabindex="0">
<span class="dijitReset dijitInline dijitIcon dijitNoIcon" data-dojo-attach-point="iconNode"></span>
<span class="dijitReset dijitToggleButtonIconChar">\u25cf</span>
<span id="xwt_widget_form_TextButton_2_label" class="dijitReset dijitInline dijitButtonText" data-dojo-attach-point="containerNode">Okay, got it.</span>
</span>
所以我尝试了大多数类型的点击:
@browser.span(:text => /Okay/).click
@browser.span(:text => /Okay/).fire_event("onclick")
@browser.span(:text => /Okay/).double_click
@browser.span(:text => /Okay/).send_keys :enter etc
我也使用,焦点,悬停..我看到所有这些定位元素并且确实单击(因为我看到元素类型显示对webdriver点击的反应,但按钮类型淡化,就是这样,没有任何进一步发生,没错误) 但我注意到它的html更改只需点击一下,但如果我再次尝试再次点击,则没有任何反应:
<span class="dijit dijitReset dijitInline defaultButton xwtButton xwt-TextButton xwt-TextButtonHover digitHover xwt-TextButtonFocused xwt-TextButtonHoverFocused dijitHoverFocused dijitFocused" role="presentation" widgetid="xwt_widget_form_TextButton_2">
请帮助我如何处理此UI点击
答案 0 :(得分:1)
当你有这样的嵌套跨度时,只有最里面有文本,所有跨距实际上都有相同的文本。因此,如果您尝试单独选择文本,则watir将返回找到匹配的第一个,这很可能是外层容器。这可能不是需要接收点击操作的那个。
所以你需要通过其他一些参数来选择,比如可能是类(基于评论是你最终做的)
@browser.span(:class => "dijitReset dijitInline dijitButtonNode").click
具有类似结构的棘手部分是找到哪一组嵌套跨度是需要点击的那个..这主要是实验.. IRB是你的朋友。
顺便说一句,无论您的开发人员使用哪个库..由此产生的html和DOM结构会让我的大脑受伤......