В тестовом окне моего webdriver мне нужно разобрать номер из URL-адреса (и проверить сбой, если его там нет), но сначала подождите, пока я перенаправлен на URL-адрес, содержащий число. Например, когда я иду на «локальном/# createRecord» Я перенаправлен на «локальном/# editRecord/какой-номер»Лучший способ избежать дополнительной работы с пользовательским предикатом WebDriver
wait.until(ExpectedConditions.urlMatches("#editRecord/([0-9]*)$"));
String url = driver.getCurrentUrl();
Pattern p = Pattern.compile("#editRecord/([0-9]*)$");
Matcher m = p.matcher(url);
int newStudentId=0;
if (m.find()) {
newStudentId = Integer.parseInt(m.group(1));
System.out.println(m.group(1)); // The matched substring
} else fail("There is no ID number in #editRecord page");
В этом случае на самом деле дополнительное согласование работа происходит после того, как ждать. пока (...) После некоторого поиска я пришел к этой вариации кода. Это экономит разборе результат, как только это успешно:
Pattern p = Pattern.compile("#editRecord/([0-9]*)$");
final int[] newStudentId = new int[1]; //declared like this because otherwise we won't be able to assign value to it from lambda expression
try {
wait.until((WebDriver driver) -> {
String url = driver.getCurrentUrl();
Matcher m = p.matcher(url);
if (m.find()) {
newStudentId[0] = Integer.parseInt(m.group(1));
return true;
} else return false;
});
} catch (org.openqa.selenium.TimeoutException e) {
fail("There is no ID number in #editRecord page or we haven't been redirected to #editRecord page");
}
System.out.println(newStudentId[0]);
Обе версии работают, но я не уверен, какой из них лучше использовать с точки зрения читаемости (я не использовать лямбды до и не понимаю полностью) и надежность. Кроме того, ловя исключение тайма-аута во втором варианте своего рода охватывает больше случаев терпят неудачу, что первый один
Почему вы используете массив для 'newStudentId'?Если вы этого не сделаете, какая ошибка вы получите? –
@ GrzegorzGórkiewicz есть комментарий в фрагменте кода с объяснением –
Конечно, я его видел, но все равно не понимаю. –