如何找到<g>之类的自定义标签?

ibo*_*dog 5 watir-webdriver

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

browser.wd.find_elements( :tag_name => "g" )
Run Code Online (Sandbox Code Playgroud)

什么是watir webdriver的等价物?

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

我能否<g>以某种方式在本地添加对标签的支持?

Jus*_* Ko 6

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

相当于你在selenium-webdriver中所做的是:

browser.elements( :tag_name => "g" )
Run Code Online (Sandbox Code Playgroud)

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

browser.elements( :tag_name => "g" ).each do |x|
  puts g.text
end
Run Code Online (Sandbox Code Playgroud)

解决方案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
Run Code Online (Sandbox Code Playgroud)

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

puts browser.g(:index, 0).text
browser.gs.each{ |x| puts x.text }
Run Code Online (Sandbox Code Playgroud)

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

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

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

class G < Element
    def cursor_style()
        assert_exists
        return @element.style("cursor")
    end
end
Run Code Online (Sandbox Code Playgroud)

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

puts browser.g(:index, 0).cursor_style
#=> move
Run Code Online (Sandbox Code Playgroud)

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

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

puts browser.g(:index, 0).style("cursor")
#=> move
Run Code Online (Sandbox Code Playgroud)