Как проверить процент жирного текста на веб-странице? - PullRequest
3 голосов
/ 02 марта 2012

У меня есть экземпляр, где мне нужно проверить, как стилизовано содержимое страницы (не обязательно только с помощью CSS).

Например, тест (огурец), который я хотел бы написать:

Для стандартизации веса текста
Как веб-мастер
Я хочу сообщить процент жирного текста на странице

Проблема в том, что мне трудно понять, как на самом деле получить этот результат. Глядя на различные среды тестирования HTML (Selenium, Watir, Capybara), кажется, что я могу проверять только наличие тегов или наличие классов CSS, а не вычисленный визуальный результат.

В Firebug я вижу вычисленный результат CSS (который работает для определений , и font-weight:bold), но мне нужно иметь возможность поместить его в среду тестирования для запуска под CI.

1 Ответ

1 голос
/ 06 марта 2012

В 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 решение, но, надеюсь, решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...