如何使用多个CSS定位器作为selenium定位器?

时间:2010-02-18 16:00:14

标签: selenium css-selectors selenium-webdriver

我正在尝试点击包含多个链接的表格行中的链接。整个表格中使用此模式。

这有效:

browser.wait_for(:element => "css=tr:nth-child(1) li:nth-child(2) > a")

这不是:

browser.click "css=tr:nth-child(1) li:nth-child(2) > a"

为什么会出现这种情况?我正在使用selenium-client ruby​​gem。

3 个答案:

答案 0 :(得分:1)

我怀疑这是由于cssQuery中的一个错误,Selenium目前使用它来通过CSS定位元素。有关问题和修补程序的详细信息,请参阅以下问题的评论:http://jira.openqa.org/browse/SEL-698

希望有所帮助 - 我相信Selenium 2将使用不同的CSS定位器库 - 可能是JQuery的Sizzle(http://sizzlejs.com/),这应该可以解决这个问题。

戴夫。

答案 1 :(得分:0)

为了避免像这样痛苦的CSS问题,我已经安装了jQuery作为用户扩展。它提供了定义类似于CSS的定位器String的能力(“jquery = td.dt-col-status div.dt-liner:contains('Complete')”),它更强大。如果你愿意,我可以扩展我为Java RC做的方式。

答案 2 :(得分:0)

这是selenium 1中的一个错误我会尝试写出你的css路径中的整个路径,看看是否有帮助。

如果您使用以下html,可以使用以下css定位器
    

    <table>
        <tr>
            <td>
                <li>
                    <a href="/yourlink" >
</li> </td> </tr> </table>

"css=tr:nth-child(1) > td > li:nth-child(2) > a"

如果这不起作用,您可以始终使用xpath。它与CSS定位器一样富有表现力,但往往有更少的故障。 使用xpath时,唯一需要记住的是它们通常比css定位器慢。

"xpath=//tr/td//li[2]/a"