Как использовать функцию intern leadfoot waitForDeletedByXpath?
По какому сценарию я могу использовать функцию waitForDeletedByXpath интерна? Из документации я понял, что этот метод ждет, пока элемент станет невидимым в Page. Но при реализации это не так. Scenerio я использую это следующим образом:
В моем приложении есть страница, где я могу искать данные с некоторыми предопределенными аргументами. После нажатия на кнопку поиска на странице появляется значок загрузки, пока данные не будут загружены в сетку данных, а значок загрузки исчезнет после загрузки данных. поэтому я пытаюсь использовать эту функцию, чтобы подождать, пока значок загрузки не исчезнет со страницы, чтобы я мог прочитать данные в сетке данных без каких-либо проблем, но, похоже, это не сработало. Может кто-нибудь, пожалуйста, пролить некоторый свет на то, как работает эта функция, и указать мне правильное направление, чтобы достичь того, что я пытаюсь сделать. Спасибо
1 ответ
Я считаю, что то, что здесь происходит, является небольшим неправильным толкованием того, что waitForDeletedByXPath
метод делает.
В документации этого метода сказано:
Msgstr "Ожидает уничтожения всех элементов внутри этого элемента, соответствующих указанному атрибуту имени."
Когда ваш значок загрузки исчезает, он, скорее всего, все еще является частью DOM, хотя он просто установлен как невидимый. Этот метод предполагает, что элемент больше не будет частью DOM.
По моему опыту, вам нужно настроить собственный метод ожидания невидимого элемента для значка загрузки.
Например:
return this.remote
.then(function () {
const waitForLoadingIconNotDisplayed = function (remoteSession) {
return remoteSession
.findByCssSelector('your_loading_icon_css_selector')
.isDisplayed()
.then(function (isDisplayed) {
if (isDisplayed) {
return waitForLoadingIconNotDisplayed(remoteSession);
}
return true;
});
};
return Promise.all([waitForLoadingIconNotDisplayed(this.parent)]);
})
Это будет выполняться до тех пор, пока не будет выполнено условие, что ваш значок загрузки больше не будет отображаться в пользовательском интерфейсе, используя Promise.all()
вызов.
Надеюсь, это поможет вам выбрать правильный путь!