как получить значение из необработанного или xml HTML ответа по groovy - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь получить userToken из этого вида необработанного ответа:

    HTTP/1.1 200 
Date: Wed, 19 Feb 2020 14:48:32 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: nginx
Vary: Accept-Encoding
Content-Security-Policy: default
Content-Language: en-US
Content-Encoding: gzip

<!DOCTYPE html>
<html>
  <head>
    <link rel="icon" href="https.."/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
    <title>Portal</title>
  </head>
  <body>
  <div id="root"></div>
  <script type="application/javascript">
      window.__webpack_public_path__ = "https";
      window.pageData = {
          configuration: {
              lang: "en",
              country: "UK",
              customization: (input)
          },
          userToken: "3ae85a89-1905-4120-9a8c-7a5d623b51d6",
          cOMPANY: 'OPEL',
          policies: JSON.parse(INPUT)

К сожалению, я не могу получить прямое значение userToken, я пытался с таким утверждением

import com.eviware.soapui.support.XmlHolder
import net.sf.json.groovy.JsonSlurper

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder(messageExchange.responseContentAsXml)

/*for ( userToken in holder.getNodeValues( "//window.pageData/configuration/userToken" ))
log.info "UserToken : [$userToken]"
*/
def userT = holder["//*:script/@userToken"]
token = (Arrays.toString(userT))
log.info token

но все равно ничего, и я получаю пустые скобки []; без @userToken я получаю всю часть из тега сценария. Есть идеи, как с этим справиться? Буду благодарен

В xml ответ выглядит так:

<html>
   <head>
      <meta content="HTML Tidy for Java (vers. 26 wrz 2004), see www.w3.org" name="generator"/>
      <link href="https:" rel="icon"/>
      <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/>
      <title>Portal Seite</title>
   </head>
   <body>
      <div id="root"/>
      <script type="application/javascript">window.__webpack_public_path__ = "https:";
      window.pageData = {
          configuration: {
              lang: "de",
              country: "CH",
              customization: JSON.parse(input)
          },
          userToken: "3ae85a89-1905-4120-9a8c-7a5d623b51d6",
          company: 'OPEL',
          policies: JSON.parse(
      ]]><br/><![CDATA[
     "}]"), 
      ]]><script src="https:" type="text/javascript"/>
   </body>
</html>

1 Ответ

0 голосов
/ 20 февраля 2020

Чтобы прояснить свой вопрос относительно решения RegEx, вы можете изменить свой скрипт на:

def xml = messageExchange.responseContentAsXml
def pattern = /userToken: "([a-z0-9-]+)"/
def match = xml =~ pattern
def token = (match.find()) ? match.group(1) : null
println token
...