5

我不得不处理页面中带有<g>标签的一些图形项目。我可以通过放入 selenium webdriver 来做这样的事情来找到它们:

browser.wd.find_elements( :tag_name => "g" )

watir webdriver 的等价物是什么?

另外,我如何将这些硒元素转换为 watir 元素?

我可以添加对<g>标签的支持以某种方式在本地等待吗?

4

2 回答 2

6

解决方案 1 - Watir-Webdriver 等效项:

相当于您在 selenium-webdriver 中所做的事情是:

browser.elements( :tag_name => "g" )

所以你可以做这样的事情来输出每个元素的文本:

browser.elements( :tag_name => "g" ).each do |x|
  puts g.text
end

解决方案 2 - 添加对 G 元素的支持:

在需要 Watir-webdriver 之后,添加以下代码:

module Watir
    module Container
        def g(*args)
            G.new(self, extract_selector(args).merge(:tag_name => "g"))
        end

        def gs(*args)
            GCollection.new(self, extract_selector(args).merge(:tag_name => "g"))
        end         
    end

    class G < Element
    end

    class GCollection < ElementCollection
        def element_class
            G
        end
    end
end

然后你可以像对待任何其他元素一样对待'g'。例如:

puts browser.g(:index, 0).text
browser.gs.each{ |x| puts x.text }

G 和 GCollection 类将支持所有标准元素方法。如果有特定于该元素的内容,您可以向该类添加其他方法。

更新 - 添加自定义方法的示例:

要获得光标样式,您可以向 G 类添加一个方法,如下所示:

class G < Element
    def cursor_style()
        assert_exists
        return @element.style("cursor")
    end
end

这将允许您像这样获取游标属性:

puts browser.g(:index, 0).cursor_style
#=> move

任何与元素交互的自定义​​方法都需要以 assert_exists 开头。然后,在该方法中,您可以使用 @element 变量来处理元素。

请注意,因为 G 元素继承自 Element 类,您也可以使用内置样式方法:

puts browser.g(:index, 0).style("cursor")
#=> move
于 2012-05-23T14:31:24.657 回答
1

watir 或 watir-webdriver 不支持非标准 HTML 标签。部分原因是我们必须支持的可能标签名称列表是无穷无尽的。

如果你愿意,你可以在你自己的自定义标签中进行猴子补丁。从长远来看,如果您将不得不大量处理这些自定义标签,那么这可能是您最好的解决方案,因为它的行为就像 Watir api 支持的其他标准 HTML 元素一样。

您可以在标签名称上使用 CSS 选择器,但这仅在您坚持元素对象时才有效,如Watir::Exception::MissingWayOfFindingObjectException: invalid attribute: :css中所述。如果您问我,哪种方式会使事情变得不那么可读和/或有用,但在这方面可能是一个快速而简单的解决方案,值得付出微薄的代价。

或者,当您需要 watir 不支持的东西时,您可以使用.driveror方法来访问 webdriver 功能。.wd(但这也不那么可读)

于 2012-05-23T06:32:01.437 回答