【问题标题】:Having trouble using Capybara and Selenium to find an svg tag on a page无法使用 Capybara 和 Selenium 在页面上查找 svg 标签
【发布时间】:2011-07-22 23:21:55
【问题描述】:

我有一个这样的测试用例:

  scenario "there should be an SVG tag" do
    ...
    page.find("svg")
  end

由于某种原因,Capybara 无法找到 svg 标签,即使当我查看页面的源代码时,标签就在那里(并且在视觉上也是如此)。

在我做了类似的事情之后,我才能让它找到 SVG 标签:

  scenario "there should be an SVG tag" do
    ...
    page.find("#layers *[xmlns='http://www.w3.org/2000/svg']")
  end

(注意,svg 在“layers”ID 中)。

有人有什么想法吗?我使用 Selenium 作为驱动程序。

【问题讨论】:

  • 有谁知道 Selenium 的 svg 标签是否有问题?
  • 这是一个 XHTML 页面还是 HTML?

标签: selenium svg capybara


【解决方案1】:

事实证明这是 Firefox 内置的 xpath 评估器的问题。

使用 FireBug,我能够验证 Selenium 使用的调用:

document.evaluate("//svg", document, null, 9, null).singleNodeValue

不返回任何元素,而

document.evaluate("//div", document, null, 9, null).singleNodeValue

返回页面上的第一个 div。

可能会有一些命名空间问题导致 FireFox 返回 svg 元素。现在我只是用我的 svg xmlns 属性寻找元素。

【讨论】:

  • 原来“.//svg”的执行方式与“.//*[name()='svg']”不一样。我认为这与命名空间问题有关。
  • shawn42 的评论解决了这个问题。谢谢!
【解决方案2】:

我找到了一个可以使用 CSS 选择器的解决方案:

scenario "there should be an SVG tag" do ... Nokogiri::HTML.parse(page.body).css('svg') end

不过,使用 page.find() 并不能解决问题,这很奇怪,也很烦人。

【讨论】:

  • 找不到“svg”时会发生什么?测试会失败吗?
猜你喜欢
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2018-05-14
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2019-05-06
相关资源
最近更新 更多