Selenium + JS: driver.wait (пока .elementLocated (By (), 2000)) иногда застревает - PullRequest
0 голосов
/ 29 июня 2018

так что теперь мой браузер работает в основном так, как задумано. Это в основном циклы по нескольким for циклам для проверки нескольких сотен (или тысяч) комбинаций настроек.

Но в большинстве случаев каждая моя функция застревает в точке ожидания условия elementLocated. Функции getElementText() возвращают текст данного элемента, используя локатор xpath. Если данный элемент не может быть найден, он возвращает «нет данных». из-за очень часто обновляемого DOM мне пришлось обходить стандартным способом findElement(). Функция следующая:

async function getElementText(xPathStringOfElement){
    await console.log ('starting getElementText() ...');
    let textOfElement = 'NO DATA';

await driver.wait(await until.elementLocated(By.xpath(xPathStringOfElement), 2000)).getText()
.then(async function (text0){
    textOfElement = text0;
},async function (err0){
    await console.log('ERROR: ' + err0);
    await console.log('...')
    await console.log('Wait for Element to be shown.')
    await driver.sleep(1000);
    await driver.wait(await until.elementLocated(By.xpath(xPathStringOfElement), 2000)).getText()
    .then(async function (text1){
        textOfElement = text1;
    },async function (err1){
        await console.log('ERROR: ' + err1);

    });
});
return textOfElement;
}

Итак, я ожидаю, что это произойдет (и что будет успешно выполнено несколько сотен раз подряд), что если await driver.wait(await until.elementLocated(By.xpath(xPathStringOfElement), 2000)).getText() ждет 2 секунды, функция переходит на async function (err0){ и выдает ошибки ... Но иногда и я не понимаю, почему getElementText() застревает и ждет вечно.

У кого-нибудь есть идеи, как я могу улучшить свой код здесь?

Спасибо!

1 Ответ

0 голосов
/ 03 июля 2018

После добавления другого await и использования: await driver.wait(await until.elementLocated(await By.xpath(xPathStringOfElement), 2000)).getText() похоже, теперь он работает нормально.

...