2011-11-03 52 views
2

按钮,我想使用的Watir点击一个链接,看起来像一个按钮连接的图像。如何点击一个奇怪的链接看起来像的Watir

我用下面的方法,但不工作:

@browser.div(:id,"NetworkAnalysisTabPanel").div(:index,1).div(:index,1).ul(:index,1).li(:index,1).link(:index,2).click 

注:

@browser.div(:id,"NetworkAnalysisTabPanel").div(:index,1).div(:index,1).ul(:index,1).li(:index,1).link(:index,2).flash 

工作正常,但点击没有工作在IE和FF

链接看起来像这样:

link

而且HMTL像这样:

html

注:我可以点击使用硒IDE与clickAt方法的元素

+1

如果我可以给你+100包括HTML在你的“我需要点击”的问题,我会。 – kinofrost

+0

如果HTML是作为代码块而不是图像发布的,我会给他更多的信息,但是图像比没有任何共同点的图像更好。 –

+0

其实我们可能有Z感谢嵌入的东西,检查编辑历史.. –

回答

1

试试这个(未测试):

browser.link(:class => "x-tab-strip-menu").click 

如果你能闪的链接,但你想要的点击并不会做,看到这一点:How to find out which JavaScript events fired?

+0

这个。如果.click不起作用,请尝试.fire_event('click')。并仔细检查DOM中已突出显示的HTML是否正确。 – kinofrost

+0

我试过.fire_event('点击')它也不能正常工作,并且在DOM中使用DOM –

0

仅供参考您所拥有的链接是使用通过CSS魔术控制的标准背景图像,该链接的类别上的按键可知道要设置的背景。这就是图像的来源,以及为什么你不把它看作是HTML链接的一部分。

在该控件中,每个选项卡都是无序列表(ul)中的列表项元素(li),并且每个列表项都有一个ID,因此这是最简单的方法来告诉它您尝试在哪个选项卡中单击。

尝试识别的东西开始与作为标签的容器中,作为容器内仅存在一个给定类的每个链路的实例的L1。在这4个链接中,只有一个没有任何简单的标识符,如果你需要点击那个你需要使用的:index,但是对于其他3个使用class的链接应该可以工作。这应该会导致代码不那么脆弱,并且如果选项卡的顺序发生更改或页面被重构,则代码可能会被破坏。

@browser.li(:id,"NetworkAnalysisTabPanel__ext-comp-1038").link(:class, "x-tab-strip-menu").click 

如果在ID的末尾数字是随时更改,你可以尝试正则表达式,你可以预测部分匹配,并且是与其他独特

@browser.li(:id,/NetworkAnalysisTabPanel__ext-comp-/).link(:class, "x-tab-strip-menu").click 

如果可以的话可靠地识别对象并使用.flash,但.click似乎没有做任何事情,您可能必须改用.fire_event('onclick')或.click。

@browser.li(:id,/NetworkAnalysisTabPanel__ext-comp-/).link(:class, "x-tab-strip-menu").fire_event('onclick') 

如果不工作,那么你就需要开始与控制可能会寻求(在HTML这不一定会出现顺便说一句..它可能是在JavaScript或CSS等可能事件试验)

UPDATE 这是具有我们能与是关键相互作用的控制的活例子。在类名上做一些搜索,我找到了一个here,让我用它玩一下,我发现它正在寻找onmousedown。因此,在该网站上,这部作品

browser.li(:id, 'TabPanel1__ctl07').link(:class, 'x-tab-strip-menu').fire_event('onmousedown') 

现在,因为这些ID的未必是最好的标识符(使用的.text上保存的标签部分里)更多的挖掘发现了我一些文字,这在一个像这样的菜单应该是唯一的......所以,我们可以改变这一点,使得事情变得更加健壮和清晰,就我点击的标签而言(如果标签变化,这也不会受到破坏。)

browser.li(:text, 'Menu 1').link(:class, 'x-tab-strip-menu').fire_event('onmousedown') 

最后,由于点击导致客户端代码执行,你可能需要一个短暂的停顿(一个或两个第二睡眠),以等待页面的那部分重新呈现等

+0

正确显示了HTML:class not working我得到元素未找到错误,我使用下面的代码来定位=== @ browser。 DIV(:ID, “NetworkAnalysisTabPanel”)。DIV(:指数,1).div(:指数,1).UL(:指数,1)。李(:指数,1)。链路(:指数,2)。 click ==我不能使用@ browser.li(:id,“NetworkAnalysisTabPanel__ext-comp-1038”)。link(:class,“x-tab-strip-menu”)。点击因为li的id是动态的 –

+0

Is there这个类名的一部分是静态的,可预测的,与其他的不同?如果是这样,你可以使用正则表达式来匹配LI元素。像你这样的长列表并不是首选,因为如果页面在该区域内变化很小,它们往往会变得脆弱和破裂。 –

+0

编辑了答案,尝试解决您的意见。 –

相关问题