我調整@ pguardiario的答案,想出這個方法:
def get_element_dom_info(@e)
if @e.class != Selenium::WebDriver::Element
raise "No valid element passed: #{@e.class}"
end
@attrs = ['id', 'class', 'title', 'href', 'src', 'type', 'name']
return "<" + @e.tag_name + @attrs.map{ |x| " #{x}='#{@e.attribute(x)}'" if @e.attribute(x) && @e.attribute(x) != "" }.join('') + ">"
end
當然,希望你進入它的一個參數是一個實際的硒元素。此外,它不包含所有可能的屬性,但這是其中的大多數屬性(如果需要,您可以隨時添加額外的屬性)。
我想你可以通過一些像這樣的代碼,這個整合:
def clickElement(*args)
... # parse vars
@e = @driver.find_element(...)
puts get_timestamp + " Clicked on Element: " + get_element_dom_info(@e)
end
UPDATE 最近,我意識到,我可以得到使用原生的JavaScript元素的完整的HTML(D'哦!)。你必須使用hack來獲得「outerHTML」。這是我的新方法:
def get_element_dom_info(how, what)
e = @driver.find_element(how, what)
# Use native javascript to return element dom info by creating a wrapper
# that the element node is cloned to and we check the innerHTML of the parent wrapper.
return @driver.execute_script("var f = document.createElement('div').appendChild(arguments[0].cloneNode(true)); return f.parentNode.innerHTML", e)
end
不,這不是。我只是通過例子來輸入這些元素。一些元素可能有'class'或'id'屬性,有些可能沒有 – ShockwaveNN
我明白,但我認爲這是非常接近你會得到。 – pguardiario