【问题标题】:Testing a link's target attribute with Capybara/RSpec使用 Capybara/RSpec 测试链接的目标属性
【发布时间】:2012-06-05 17:51:10
【问题描述】:

我对 Rails/RSpec/Capybara 有点陌生,所以这可能是一个新手问题,但 Google 并没有像我希望的那样提供帮助。我希望我可以使用

it { should have_link('link text', href: 'url', target: '_blank') }

为应该在新窗口中打开的链接编写测试,但这似乎不起作用。我还尝试将选项散列包装在花括号中:

it { should have_link('link text', {href: 'url', target: '_blank'}) }

无论被测试的实际页面和链接中目标属性的存在或值如何,测试都将始终成功。更改 href 属性确实会按预期导致测试失败。我认为 have_link 的选项哈希是要测试的属性列表。显然我错了,但是测试单个链接的目标属性的最佳方法是什么?希望不要使用 XPath 搜索...

【问题讨论】:

    标签: rspec capybara


    【解决方案1】:

    我不确定为什么您的代码不起作用。你有没有试过这个:

    find_link('link_text')[:href].should == 'url'
    find_link('link_text')[:target].should == '_blank'
    

    【讨论】:

      【解决方案2】:

      使用新的 rspec 3 语法:

      is_expected.to have_link('link_text', href: 'url')
      expect(find_link('link_text')[:target]).to eq('_blank')
      

      【讨论】:

        【解决方案3】:

        你可以这样做:

        it { should have_css "a[href~='/somewhere'][target~='_blank']" }
        

        【讨论】:

          【解决方案4】:

          定义一个自定义匹配器,用于查找链接并检查其target 属性是否为'_blank'

          RSpec::Matchers.define :have_link_open_in_new_window do |locator, options={}|
            match do |page|
              link = page.find_link(locator, options)
              link && link[:target] == '_blank'
            end
          end
          

          使用have_link_open_in_new_window(locator, options),就像使用have_link(locator, options)

          expect(page).to have_link_open_in_new_window('Link text or id', href: '...')
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-16
            • 1970-01-01
            相关资源
            最近更新 更多