用空手道从html响应中提取Javascript



我需要帮助。我有一个POST请求,它返回一个带有HTML响应的响应,而这个HTML响应中包含javascript。我需要提取text/javascript,它说checkout={"TransactionID"}…并使用空手道在新的POST请求中作为主体传递。我想我需要在空手道功能文件中编写javascript函数,但是,我无法导入库等。

<!DOCTYPE html>
<html lang="en">
<head>
<title> ABC test</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="format-detection" content="telephone=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#eb843a">
<meta name="theme-color" content="#eb843a">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="https://use.typekit.net/plq2clw.css" />
<style type="text/css">
body {
background-color: #eff3ef;
}
.splash-content {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

.splash-ring {
position: relative;
width: 64px;
height: 64px;
margin: 0 auto;
margin-bottom: 20px;
}

}
</style>
</head>
<body>
<div aurelia-app="root">


<div class="splash-body animated fadeIn">
<div class="splash-content splash-primary">
<div>
<div class="splash-ring"><div></div><div></div><div></div><div></div></div>
</div>
humming...
</div>
</div>
</div>
<script src="/Client/jspm_packages/system.js"></script>
<script type="text/javascript">
System.baseURL = "/Client/";
var version = '1.1.46.29705';
var checkout = null;
var transactionId = null;
var channel = null;
</script>
<script src="/Scripts/crtgpf.js"></script>
<script src="/Scripts/crtgpf-wrapper.js"></script>
<script type="text/javascript">
checkout = **{"TransactionId":457123,"TransactionTimeout":0,"Step":38,"Status":10,"Channel":1,"Variation":"DEFAULT","ProductType":"EPOZ","ProductMode":2,"PlatformType":"Default","Platform":{"Name":"Default","Currency":"AUD","IsTesting":false,"IsShipped":false,"Nonce":null,"CustomerInfo":{"Title":"Mr","FirstName":"first541","MiddleName":"JOURNEYA","LastName":"external541","FullName":"first541 JOURNEYA external541","Email":"aaa@b.com.au","Mobile":"33333","PhoneHome":"33333","PhoneWork":"0881110011","DateOfBirth":"1970-08-01T00:00:00Z"},"Instalments":[],"Deposit":0.0,"DepositInitial":0.0,"Amount":200.5,"Description":"","FinancedAmount":200.5,"Frequency":2,"TermsInMonths":5},"Data":{"customer.detail.middleName":"JOURNEYA","employment.suburb":"burb1","customer.address.home.line1":"1528 STURT ,"client.headers":"[{"Key":"Cache-Control","Value":"max-age=0"},{"Key":"Connection","Value":"keep-alive"},{"Key":"Content-Length","Value":"1549"},{"Key":"Content-Type","Value":"application/x-www-form-urlencoded"},"Outcome":0,"AcceptedTerms":null,"AcceptedPrivacy":null,"ConsumerFees":null,"PaymentPlans":[],"Redirect":null,"AuthReason":null,"ErrorCode":null}**;
transactionId = 457123;
</script>
<script src="/Client/2222/config.js"></script>
<script src="/Client/2222/dist/startup.js"></script>
<!-- Google Tag Manager -->
<script>
var gtmContainerId = 'GTM-5533';
(function (w, d, s, l, i) {
w[l] = w[l] || []; w[l].push({
'gtm.start':
new Date().getTime(), event: 'gtm.js'
}); var f = d.getElementsByTagName(s)[0],
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', gtmContainerId);
</script>
<!-- End Google Tag Manager -->
</body>
</html>;

我需要提取这个javascript,这将是下一次POST调用中的一个请求。

使用Java正则表达式:

* def pattern = java.util.regex.Pattern.compile('checkout =.+(\{[^;]+)')
* def matcher = pattern.matcher(response);
* assert matcher.find()
* def body = matcher.group(1)

我们将在0.9.6.RC3以后的版本中将其添加为karate.extract()帮助程序:https://github.com/intuit/karate/issues/1094#issuecomment-616059232

EDIT-更好的详细示例:https://stackoverflow.com/a/67331307/143475

最新更新