Проблема с кнопкой с IE драйвером и Xpath Selenium с Java - PullRequest
0 голосов
/ 11 марта 2020

У меня следующая проблема:

У меня есть кнопка внутри формы (на веб-странице есть поле ввода логина и пароля и кнопка), эта кнопка вызывает функцию js и после входа в систему и проверка пароля, вызывает главную веб-страницу. Код html такой (этот код внутри формы вызывает «login» и method = POST):

<INPUT class="btn btn-mini btn-primary" onclick=submitForm(); type=button value="Sign On">

В Selenium я пытаюсь выполнить следующие утверждения, но без успеха:

driver.findElement(By.xpath("//input[@type='button']")).click();
driver.findElement(By.cssSelector("input[type='button'][@value='Sign On']")).click();
driver.findElement(By.xpath("//input[@value='Sign On']")).click();

когда я запускаю скрипт, текст логина и пароля заполняется правильно, но нажатие кнопки не работает.

Не могли бы вы помочь мне с этим?

Спасибо !

Гонсало из Чили

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Я нашел решение, прочитав множество вопросов, связанных с этим. Я работаю с win 10 и IE 11, поэтому у Selenium есть проблема с этим, потому что размер текста, приложений и других элементов должен быть равен 100%. В моем случае эта конфигурация была у меня на 150%. Исправляя это, я снова запускаю скрипт, и он работает.

Используемый код:

WebElement button = null;
List<WebElement> inputs = webDriver.findElements(By.tagName("input"));
for (WebElement input : inputs) {
    if (input.getAttribute("value").equals("Log In")) {
        button = input;
        break;
    }
}
if (button == null) {
    System.err.println("Cannot find button!");
} else {
    System.out.println("Clicking button now!");
    button.click();
}

После этого я проверяю другой код, более эффективный:

driver.findElement(By.cssSelector("input[type='button'][value='Sign On']")).click();

Это тоже работает.

спасибо всем за помощь

0 голосов
/ 11 марта 2020

Чтобы щелкнуть по элементу, вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.btn.btn-mini.btn-primary[value='Sign On'][onclick^='submitForm']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='btn btn-mini btn-primary' and @value='Sign On'][starts-with(@onclick, 'submitForm')]"))).click();
    
...