В Watir вы можете получить доступ к элементу font-weight, напрямую обращаясь к объекту win32ole. Например:
ie.div(:index, 1).document.currentStyle.fontWeight
Это даст вам числа, представляющие вес, как описано в http://www.w3schools.com/cssref/pr_font_weight.asp
Я думаю, что тогда вам нужно будет выполнить итерацию по всем элементам на странице, проверяя, каков его fontWeight и сколько текста содержится в элементе. То, как вы это сделаете, будет зависеть от страницы, которую вы тестируете.
Решение 1 - Если весь текст находится в делениях, которые являются конечными узлами:
Если весь ваш текст находится в листовых узлах, как это:
<body>
<div style='font-weight:bold'>Bold</div>
<div>Plain</div>
</body>
Вы можете легко сделать:
bold_text = 0
plain_text = 0
ie.divs.each{ |x|
if x.document.currentStyle.fontWeight >= 700
bold_text += x.text.length
else
plain_text += x.text.length
end
}
Решение 2 - Если стили взаимодействуют или используют несколько элементов:
Если не весь текст находится в конечных узлах или вы используете другие теги, такие как <b>
(см. Пример HTML ниже), вам потребуется более сложная проверка. Это связано с тем, что .text возвращает весь текст в элементе, включая его дочерние элементы.
<body>
<div style='font-weight:normal'>
Start
<div style='font-weight:bold'>Bold1</div>
<div style='font-weight:bold'>Bold2</div>
End
</div>
<b>Bold Text</b>
</body>
В этом случае, я считаю, что в большинстве случаев работает следующее (но может потребоваться уточнение):
#Counting letters, but you could easily change to words
bold_count = 0
plain_count = 0
#Check all elements, though you can change this to restrict to a particular containing element if desired.
node_list = ie.document.getElementsByTagName("*")
0.upto(node_list.length-1) do |i|
#Name the node so it is easier to work with.
node = node_list["#{i}"]
#Determine if the text for the current node is bold or not.
#Note that this works in IE. You might need to modify for other browsers.
if node.currentStyle.fontWeight >= 700
bold = true
else
bold = false
end
#Go through the childNodes. If the node is text, count it. Otherwise ignore.
node.childNodes.each do |child|
unless child.nodeValue.nil?
if bold
bold_count += child.nodeValue.length
else
plain_count += child.nodeValue.length
end
end
end
end
#Determine number of characters that are bold and not. These can be used to determine your percentage.
puts bold_count
puts plain_count
Это не очень похожее на Watir решение, но, надеюсь, решит вашу проблему.