org.openqa.selenium.UnhandledAlertException: закрытое диалоговое окно с приглашением пользователя. Тест запускается на консоли, но не в Jenkins. - PullRequest
0 голосов
/ 13 февраля 2019

Я запускаю автоматизацию тестирования с помощью selenium webDriver.Он прекрасно работает в intellij, на моих компьютерах cmd, а также на серверах cmd (на котором Jenkins работает через скрипт bat).Однако он выдает исключение при запуске моего файла bat с Jenkins.

Это мой журнал ошибок (я изменил некоторые имена по соображениям безопасности):

Feb 13, 2019 1:25:45 PM org.openqa.selenium.support.ui.ExpectedConditions findElement
WARNING: WebDriverException thrown by findElement(By.cssSelector: a[class="icon-info"])
org.openqa.selenium.UnhandledAlertException: Dismissed user prompt dialog: https://myAuthentification.com is requesting your username and password.: 
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:13:22.693Z'
System info: host: 'HOSTSRV', ip: '129.103.116.133', os.name: 'Windows Server 2012 R2', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_141'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 65.0, javascriptEnabled: true, moz:accessibilityChecks: false, moz:geckodriverVersion: 0.23.0, moz:headless: false, moz:processID: 21192, moz:profile: C:\Windows\Temp\rust_mozpro..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 6.3, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: f3bbe8e0-771b-484e-82c4-ab165de1cb23

Я уже обновил Jenkins ивсе плагины, обновил firefox и попробовал, если switchTo (). alert.accept () работает в разных местах.

Вот как сейчас выглядит мой метод:

protected void checkForEntitlementAutoIt(WebDriver driver) {

    // waits for alert to be present, if not throws exception
   WebDriverWait wait = new WebDriverWait(driver, Settings.waitAlert);
    Alert alert;
    try {
        try {
            wait.until(ExpectedConditions.alertIsPresent());
            driver.switchTo().alert();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.message(driver, "Alert is present.");
    } catch(Exception e) {
        Log.message(driver, "Alert not present.");
        throw e;

    }

    /* searches for login data
     *    -> if script present, use script
     *    -> if not use data in object "login"
     */
    try {
        if(script != null && new File(script).exists()) {
            Log.message(driver, "Executing script.exe ...");
            Process runExe = Runtime.getRuntime().exec(script);
            runExe.waitFor();
        } else {
            AutoItScript script = new AutoItScript(login.getEmail(), login.getPW());
            script.create();
            script.run();
            script.delete();
        }
        //wait for alert again to check if success
        try {
            wait.until(ExpectedConditions.alertIsPresent());
            driver.switchTo().alert().accept();
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch(org.openqa.selenium.NoAlertPresentException E) {
        Log.message(driver, "No alert: Authentication succeeded.");
    } catch(org.openqa.selenium.TimeoutException E) {
        Log.message(driver, "Timeout: Authentication succeeded.");
    } catch(InterruptedException | IOException e) {
        e.printStackTrace();
        Log.message(driver, "Err: Something went wrong. Exiting...");
        System.exit(0);
    }
}

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

1 Ответ

0 голосов
/ 14 февраля 2019

Итак, я, наконец, нашел решение с почти слишком простым, я не знаю, почему я не сделал этого раньше (вероятно, потому что я был так сосредоточен на том, почему оповещения нет).

Я попытался найти другой способ ввода своих учетных данных в предупреждение (прежде чем я использовал для выполнения дополнительного сценария с именем пользователя и паролем в нем).

Теперь я просто получаю свое имя пользователя и пароль из сценария ииспользуйте аргумент sendKeys, чтобы поместить их в предупреждение.Это сработало.

До

try {
            Process execScript = Runtime.getRuntime().exec("autoit/autoit.exe " + this.path + this.file);
            execScript.waitFor();
            Log.message("Executed script " + this.file + ".");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();

После

try {
            driver.switchTo().alert().sendKeys(this.user+Keys.TAB+this.pw);
            Log.message("send keys");
        } catch (Exception e) {
            e.printStackTrace();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...