【问题标题】:how to exactly match using :class selector in watir-webdriver如何在 watir-webdriver 中使用 :class 选择器完全匹配
【发布时间】:2012-02-17 03:39:17
【问题描述】:

关于 Watir 0.5.x 的向后不兼容的变化 Finding elements by :class now matches partial class attributes.

如何获得旧行为? IE。匹配确切的类名。

在一种情况下,它破坏了我的代码:

# expand all multiple records
 while  $browser.div(:class => "expander").exists?  
  $browser.div(:class => "expander").click
 end

因为一旦.clicked,divclass 就变为 "expander hasChildren"(可能还有其他类,取决于表格行的颜色和内容) .有没有更好的方法来编写扩展所有仍折叠的行的代码?

【问题讨论】:

    标签: css-selectors watir watir-webdriver


    【解决方案1】:

    要匹配确切的类名,您可以使用带有开始和结束锚点的正则表达式:

    $browser.div(:class => /^expander$/).exists?
    

    这将完全匹配“expander”,但不匹配“expander hasChildren”或“something expander”。

    对于您关于是否有更好的方法来扩展所有行的其他问题,我认为这实际上取决于页面的 HTML 的样子。你有一个例子吗?当我在使用类似控件时遇到类似问题时,我能够使用围绕可点击的 div 的结构来使搜索更加具体。

    【讨论】:

    • 谢谢,这有帮助,只是它很脆弱。因为每一行的第一次扩展都需要进行 AJAX 调用以获取更多记录(我认为这是我同时在 Firebug 控制台中注意到的),所以我会得到一个 Element is no longer attached to the DOM 所以我在 .click 之后添加了 sleep 1 和它进一步下降,但仍然出现类似错误,其余部分未展开。
    • 该控件是否支持您的开发人员可以启用的全部扩展选项,或者提供一种您可以通过直接执行 js 访问的方法?
    • @ChuckvanderLinden 不幸的是不是,我希望他们是我的开发者;这只是我为客户帐户进行网络驱动的另一个网站,我对此没有任何影响。但是找到正确的 js 来直接执行是一个我可以深入研究的想法(但仍然需要一些可靠的指示来表明 DOM 已经完成更新,比如 .wait_until_present 可以预测的东西)
    • 网站是否使用了第三方控件? (通常可以通过谷歌搜索类名等内容)。如果是这样,并且您可以找到供应商运行的演示站点,它可以为其他人提供一种方式来查看控件的工作原理以及您的扩展逻辑。如果你能找到一个演示站点,就开始一个关于如何扩展所有行的新问题。说到这里,对于像这样与某些东西交互会改变它的东西,我使用的一个技巧是从下到上工作,不是自上而下,点击后会发生变化的内容。
    • 我没有考虑过的两个好主意。对于自下而上的方法,我必须考虑如何枚举所有 :class => /^expander$/ div,以及如何编写反向单击它们的 for 循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2020-12-02
    • 2022-11-23
    相关资源
    最近更新 更多