我使用 LB="select id="xxxx"" 和 RB=""
提取选择
然后使用类似以下的内容来获取所有选项(如果我想随机提交哪个脚本,或者我选择已经选择的一个,如果我想提交默认选择是什么。每当我需要使用复杂的正则表达式 我通常将测试用例硬编码到一个临时的测试动作中,以便在实际应用之前测试出逻辑。
TestExtract()
{
int matchCt, ord;
char *arrayMemberValue;
char * bufferToSearch =
"<option value=\"8183011816-1:USD\"";
char * bufferToSearch2 =
" <option value=\"8171245851-1:USD\">xxxxxx5851 - DDA 008171245851</option>"
" <option value=\"863006969-1:USD\">xxxxxx6969 - DDA 000863006969</option>"
" <option value=\"863006977-1:USD\">xxxxxx6977 - DDA 000863006977</option> ";
char * bufferToSearch3 =
" <option value=\"125\">AIRLINE PILOT</option> "
" <option value=\"008\" selected=\"selected\">SELF EMPLOYED</option>"
" <option value=\"232\">RECEPTIONIST</option>";
char * bufferToSearch4 =
"<select id=\"occupation\" name=\"occupation\" onchange='occupationChange();' class='form-control required' data-validate='dropdown'> "
" <option value=\"125\">AIRLINE PILOT</option> "
" <option value=\"008\" selected=\"selected\">SELF EMPLOYED</option>"
" <option value=\"232\">RECEPTIONIST</option>"
"</select>"
"<select name=\"_address_state_pr\" id=\"_address_ state_p\" class=\"form-control\">"
" <option value=\"Adjuntas\" selected>Adjuntas</option>"
" <option value=\"Aguada\"> Aguada</option>"
" <option value=\"Aguadilla\">\tAguadilla\t</option>"
" <option value=\"Aguas Buenas\">\tAguas Buenas\t</option>"
"</select>";
lr_output_message ("Test Regexp Extract");
lr_save_param_regexp (
bufferToSearch,
strlen(bufferToSearch),
"RegExp=option value=\"(.*?)\"",
"ResultParam=fromAccount",
LAST );
lr_output_message ("Value of fromAccount in buffer1 = %s", lr_eval_string("{fromAccount}"));
lr_save_param_regexp (
bufferToSearch2,
strlen(bufferToSearch2),
"RegExp=option value=\"(.*?)\"",
"Ordinal=All",
"ResultParam=reMatchesParam",
LAST );
matchCt = lr_paramarr_len("reMatchesParam");
lr_message("%d match(es) found in buffer2.", matchCt);
for (ord=1; ord <= matchCt; ord++)
{
arrayMemberValue = lr_paramarr_idx("reMatchesParam", ord);
lr_message("Member %d value: %s", ord, arrayMemberValue);
}
// find selected option - use a non capturing group to skip the greedy RegExp for prior Option values
// https://regex101.com/
// PCRE (?:value=".*").*value=(.*?) selected
lr_save_param_regexp (
bufferToSearch3,
strlen(bufferToSearch3),
"RegExp=(?:value=\".*\").*value=\"(.*?)\" selected",
"Ordinal=1",
"ResultParam=reSelectedOption",
LAST );
lr_output_message ("Value of selected option in buffer3 = %s", lr_eval_string("{reSelectedOption}"));
// normally will use web_reg_save_param_ex with LB and RB to extract the specific select statement
lr_save_param_regexp (
bufferToSearch4,
strlen(bufferToSearch4),
"RegExp=select id=\"occupation\"(.*?)</select>",
"Ordinal=1",
"ResultParam=reOptionGroupOccupation",
LAST );
lr_output_message ("Value of option group occupation in buffer4 is = %s", lr_eval_string("{reOptionGroupOccupation}"));
lr_save_param_regexp (
lr_eval_string("{reOptionGroupOccupation}"),
strlen( lr_eval_string("{reOptionGroupOccupation}")),
"RegExp=(?:value=\".*\").*value=\"(.*?)\" selected",
"Ordinal=1",
"ResultParam=reSelectedOption",
LAST );
lr_output_message ("Value of selected occupation option in buffer4 = %s", lr_eval_string("{reSelectedOption}"));
return -1; // iterate no further
}