Поскольку селен также будет обрабатывать следующую ситуацию при входе на новую страницу:
- Обновление страницы в целом, даже URL-адрес страницы не изменяется
- Частичное обновление страницы, даже URL-адрес страницы не изменяется
Как только селен обнаруживает вход на новую страницу, ссылки на элементы, найденные на предыдущей странице, являются недействительными, если вы все еще используете их в сценарии, селен сообщит StaleReferenceException.
Для решения этой проблемыпросто найти элемент снова на новой странице, чтобы получить новую ссылку для последующего использования.
// функция для проверки при выборе yes
переключатель
function testYesRaidoButton() {
// click `yes` radio button
element(<locator of `yes` raido button>).click();
// find how many new radio buttons will appear after choose `yes`
element.all(<locator of sub radio buttons of `yes`>).count()
.then(function (totalradios) {
console.log("before start " + totalradios);
for(var i=0;i<totalradios;i++) {
(function(index) {
// click one of new radio button of `yes`
element.all(<locator of sub radio buttons of `yes`>).get(index).click();
// click `submit` button
element(<locator of filterSubmit>).click();
// click `yes` radio button on `new page` again
element(<locator of `yes` raido button>).click();
})(i);
}
});
}
// функция дляпроверка при выборе радиокнопки no
function testNoRadioButton() {
// click `no` radio button
element(<locator of `no` raido button>).click();
// find how many new radio buttons will appear after choose `no`
element.all(<locator of sub radio buttons of `yes`>).count()
.then(function (totalradios) {
console.log("before start " + totalradios);
for(var i=0;i<totalradios;i++) {
(function(index) {
// click one of new radio button of `no`
element.all(<locator of sub radio buttons of `no`>).get(index).click();
// click `submit` button
element(<locator of filterSubmit>).click();
// click `no` radio button on `new page` again
element(<locator of `no` raido button>).click();
})(i);
}
});
}
На самом деле две функции имеют много одинаковых строк кода, вы можете оптимизировать их и объединить в одну функцию, чтобы принимать разные значения параметров для архивирования одной и той же цели.
Альтернативное решение для архивирования какой-либо цели с использованием двух циклов, но не рекомендуется делать так, потому что код трудно читать и понимать,довольно не дружелюбный.
// iterate `yes` and 'no'
for (var j = 0; j < 2; j++) {
(function(__index) {
element.all(<locator of `yes` and `no` radio button>).get(__index).click();
element.all(<locator of new radio buttons>).count()
.then(function(totalradios) {
console.log("before start " + totalradios);
// iterate new radio buttons
for (var i = 0; i < totalradios; i++) {
(function(index) {
// click one of new radio buttons
element.all(<locator of new radio buttons>).get(index).click();
// click `submit` button
element(<locator of filterSubmit> ).click();
// click `yes` or `no` radio button on `new page` again
element.all(<locator of `yes` and `no` radio button>).get(__index).click();
})(i);
}
});
})(j)
}