метод ожидания не будет ждать, пока элемент будет расположен в DOM - PullRequest
0 голосов
/ 21 июня 2020

Когда я нажимаю кнопку «Далее», чтобы продолжить тест, на странице происходит переход, поэтому пароль может быть введен, этот переход не позволяет мне щелкнуть раздел ввода пароля, поэтому для решения проблемы я использовал метод ожидания ждать 1 с, пока элемент не будет найден. Ошибка описывается после кода

const {
    Builder,
    By,
    until,
    Capabilities
} = require('selenium-webdriver');
// requiring needed modules

(async function login() {
    const pageLoad = new Capabilities().setPageLoadStrategy('normal')

//configuring the way the page loads 

    let driver = await new Builder().withCapabilities(pageLoad).forBrowser('firefox').build();
    try {

        await driver.get('https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=13&rver=7.3.6963.0&wp=MBI_SSL&wreply=https://www.microsoft.com/en-us/&lc=1033&id=74335&aadredir=1');

//going to link

        var userName = (await driver.findElement(By.css('#i0116'))).sendKeys((USERNAME));

//finding element and typing


        (await driver.findElement(By.css('#idSIButton9'))).click();
// clicking element
        
        await driver.wait(until.elementLocated(By.css('#i0116')),1000);
//This is where I think the error is happening
        
        var passWd = (await driver.findElement(By.css('#i0116'))).click().sendKeys(PASSWORD);
        
        (await driver.findElement(By.css('#idSIButton9'))).click();
        
    } catch (error) {
        console.log(error)
    } finally {
        console.log('finished')
    }

}())
{ NoSuchElementError: Unable to locate element: #i0116
    at Object.throwDecodedError (/home/name/Desktop/projects/Test/Chrome/pecPrea/node_modules/selenium-webdriver/lib/error.js:550:15)
    at parseHttpResponse (/home/name/Desktop/projects/Test/Chrome/pecPrea/node_modules/selenium-webdriver/lib/http.js:565:13)
    at Executor.execute (/home/name/Desktop/projects/Test/Chrome/pecPrea/node_modules/selenium-webdriver/lib/http.js:491:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  name: 'NoSuchElementError',
  remoteStacktrace:
   'WebDriverError@chrome://marionette/content/error.js:175:5\nNoSuchElementError@chrome://marionette/content/error.js:387:5\nelement.find/</<@chrome://marionette/content/element.js:330:16\n' }
finished 

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Я выбрал неправильный элемент. Вместо выбора #i0118 правильный элемент. ТУПАЛЬНО выбрал #i0116

0 голосов
/ 21 июня 2020

Если вы просто хотите дождаться завершения действия, вы можете попробовать спать с

java.util.concurrent.TimeUnit:

, если хотите, в секундах, вы можете использовать

TimeUnit.SECONDS.sleep(int);

и в течение минут вы можете использовать

TimeUnit.MINUTES.sleep(int);

Исходным способом использования сна было бы использование Thread.sleep (), но ввод здесь должен быть в миллисекундах, если ваша программа содержит несколько операторов сна, я бы предпочел TimeUnit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...