Как ждать оповещения о закрытии, используя селен веб-драйвер для ввода пароля в главном окне, используя JavaScript - PullRequest
0 голосов
/ 19 марта 2019

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

Ниже приведен мой код, который у меня есть,Я понимаю, что в этом коде, возможно, есть недостатки, но сейчас я больше всего заинтересован в том, чтобы заставить код работать.

// dependencies
const webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    Keys = webdriver.Key,
    until = webdriver.until;
const chrome = require('selenium-webdriver/chrome');
const path = require('chromedriver').path;

//so I don't have to have path on computer
const service = new chrome.ServiceBuilder(path).build();
chrome.setDefaultService(service);

//allows the use of webdriver
var driver = new webdriver.Builder()
    .withCapabilities(webdriver.Capabilities.chrome())
    .build();

//enters username, password, hits enter
const enterPassword = () => {
    console.log("this is where the password is entered")
    driver.wait(until.alertIsPresent(0)).then(() => { driver.switchTo().defaultContent(); });
    driver.findElement(By.name('username')).sendKeys('username123');
    driver.findElement(By.name('password')).sendKeys('password123');
    driver.findElement(By.name('cmdSubmit')).sendKeys(Keys.ENTER);
}

//switches window to alert and accepts it
const closeAlert = () => {
    console.log("this is where the alert gets closed")
    driver.wait(until.alertIsPresent()).then(() => { driver.switchTo().alert().accept(); });
}

//switches back to main window
const mainWindow = () => {
    console.log("this is where we switch back to the main page")
    driver.wait(until.alertIsPresent(0)).then(() => { driver.switchTo().defaultContent(); });
    // driver.switchTo().defaultContent()
}

const openPortal = () => {
    driver.get('examplewebpage.com');
    // driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}


openPortal();
closeAlert();
mainWindow();
enterPassword();

Вот что выводит моя консоль:

this is where the alert gets closed
this is where we switch back to the main page
this is where the password is entered

DevTools listening on ws://127.0.0.1:61841/devtools/browser/9b3cc5e1-c320-410e-9b45-66b0d07fb840
(node:908) UnhandledPromiseRejectionWarning: UnexpectedAlertOpenError: unexpected alert open: {Alert text :
You are using a browser other than Microsoft Internet Explorer 5.x (or post versions).
The minimum recommended web browser software is Microsoft Internet Explorer 5.0

Access to features and functionality of this site may be restricted or unavailable.}
  (Session info: chrome=72.0.3626.121)
  (Driver info: chromedriver=2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1),platform=Windows NT 10.0.17134 x86_64)
    at Object.checkLegacyResponse (C:\Automation\Everest-Automation\node_modules\selenium-webdriver\lib\error.js:592:13)
    at parseHttpResponse (C:\Automation\Everest-Automation\node_modules\selenium-webdriver\lib\http.js:533:13)
    at Executor.execute (C:\Automation\Everest-Automation\node_modules\selenium-webdriver\lib\http.js:468:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)

this is a picture of the alert Это изображение оповещения.

...