Проверка веб-страницы по ее типу документа (dtd) в рамках шага Canoo Webtest с использованием скрипта Groovy - PullRequest
1 голос
/ 15 ноября 2010

Как я могу проверить веб-страницу по ее типу документа (dtd) на шаге Canoo Webtest с Groovy?

1 Ответ

1 голос
/ 15 ноября 2010

На самом деле я знаю ответ.Но так как это заняло у меня некоторое время, я решил поделиться своим решением.Это макрос веб-теста.Вы также можете использовать последовательность только в том случае, если вам нравится ...

<macrodef name="verifySchema" description="Validate the current document against its schema">
<sequential>
    <groovy description="validate schema" >
        import javax.xml.parsers.ParserConfigurationException
        import javax.xml.parsers.SAXParser
        import javax.xml.parsers.SAXParserFactory

        import java.io.InputStreamReader


        import org.xml.sax.ErrorHandler
        import org.xml.sax.InputSource
        import org.xml.sax.SAXException
        import org.xml.sax.SAXParseException
        import org.xml.sax.XMLReader

        class MyHandler implements org.xml.sax.ErrorHandler {
            void warning(SAXParseException e) throws SAXException {
                println 'WARNING: ' + e.getMessage()
            }

            void error(SAXParseException e) throws SAXException {
                println 'ERROR: ' + e.getMessage()
                throw e
            }

            void fatalError(SAXParseException e) throws SAXException {
                println 'FATAL: ' + e.getMessage()
                throw e
            }
        }


            def factory = SAXParserFactory.newInstance()
            factory.setValidating(true)
            factory.setNamespaceAware(true)

            def parser = factory.newSAXParser()
            def reader = parser.getXMLReader()
            reader.setErrorHandler(new MyHandler())
            def response = step.context.currentResponse.webResponse
            reader.parse(new InputSource(new InputStreamReader(response.contentAsStream,"UTF-8")))
    </groovy>
</sequential>

Если вы хотите провалить тест и для предупреждений, добавьте соответствующий оператор throw в обработчик.

...