【问题标题】:How to click a strange link looks like button in watir如何点击一个奇怪的链接看起来像 watir 中的按钮
【发布时间】:2011-12-20 22:14:53
【问题描述】:

我想使用 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 中不起作用

链接如下所示:

像这样的 HMTL:

注意:我可以使用 selenium IDE 和 clickAt 方法单击元素

【问题讨论】:

  • 如果我能给你 +100 以在你的“我需要点击”问题中包含 HTML。
  • 如果 HTML 是作为代码块而不是图像发布的,我会给他更多,但图像仍然比什么都没有更好。
  • 实际上我们可能要感谢 Z 嵌入的东西,检查编辑历史..
  • @ChuckvanderLinden 我刚刚修复了图像,它们在那里但没有显示
  • 我确实想知道为什么人们不更频繁地发布 HTML,我想知道是否需要更好或更高级的教程来查找 watir/w-webdriver 中的元素。另外,我不知道 Zelkjo 是 Z,太棒了。我需要更频繁地收听播客。

标签: watir watir-webdriver


【解决方案1】:

仅供参考,您所拥有的是使用标准背景图像的链接,这些图像通过 CSS 魔术控制,在链接的类上键入以了解要设置的背景。这就是图像的来源,以及为什么您不会将其视为 HTML 链接的一部分。

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

尝试从作为选项卡容器的 LI 开始识别事物,因为在该容器中,给定类的每个链接只有一个实例。在 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 btw 中。它可能在 javascript 或 CSS 等中)

更新 这就是我们可以与之交互的控件的实时示例至关重要的地方。对类名进行一些谷歌搜索,我找到了一个here,这让我玩了一下,我发现它正在寻找onmousedown。所以,在那个网站上,这行得通

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

现在,由于这些 ID 可能不是最好的标识符,更多的挖掘(在包含标签部分的 li 上使用 .text )发现了一些文本,在这样的菜单中应该是唯一的......所以,我们可以对此进行更改,以使我单击的选项卡更加健壮和清晰(如果选项卡发生变化,这也不会受到破坏。

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

最后,由于单击导致客户端代码执行,您可能需要短暂暂停(一两秒睡眠)以等待页面的该部分重新呈现等。

【讨论】:

  • using :class is not working 我得到 element not found 错误,我使用以下代码定位 ===@browser.div(:id,"NetworkAnalysisTabPanel").div(:index, 1).div(:index,1).ul(:index,1).li(:index,1).link(:index,2).click == 我不能使用@browser.li(:id, "NetworkAnalysisTabPanel__ext-comp-1038").link(:class, "x-tab-strip-menu").click 因为 li 的 id 是动态的
  • 该类名中是否有一部分是静态的、可预测的并且与其他类名不同?如果是这样,您可以使用正则表达式来匹配 LI 元素。像您这样的长列表不是首选,因为如果页面在该区域发生微小变化,它们往往会变得脆弱和破裂。
  • @NaveenKandakur,找到了一个解决方案,至少它可以在一个看似具有相同基本代码的演示站点上运行。在“更新”之后查看答案部分
  • 触发了 onmousedown 事件并给出了 3 秒的睡眠时间,但当我尝试使用带有闪光灯的相同定位器时,下拉菜单不显示,能够观察到元素上的黄色闪光
  • 除了尝试其他可能的事件之外,我不知道该告诉您什么。也可能是一系列事件,例如 onmouseover,然后是 on mousedown(请参阅:stackoverflow.com/questions/3787555/…)我找到的示例站点是我能找到的最接近您的代码正在使用的控件的东西,并且我给您的东西对那个站点起作用为了我。如果没有直接访问您的网站,我或其他任何人都无能为力。或者联系代码库的供应商并与他们的支持人员交谈。
【解决方案2】:

试试这个(未测试):

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

如果您可以闪现链接,但点击没有执行您想要的操作,请查看:How to find out which JavaScript events fired?

【讨论】:

  • 这个。此外,如果 .click 不起作用,请尝试 .fire_event('click')。并仔细检查您突出显示的 HTML 在 DOM 中是否正确。
  • 我试过 .fire_event('click') 它也不起作用,并且突出显示的 HTML 在 DOM 中是正确的
猜你喜欢
  • 2011-07-04
  • 2010-10-17
  • 2011-07-10
  • 2023-02-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2012-01-11
相关资源
最近更新 更多