Тестовый пример Selenium не выполняется для формы, отправленной через ajax

#java #selenium #jsp #selenium-webdriver #ajaxform

#java #selenium #jsp #selenium-webdriver #ajaxform

Вопрос:

У меня есть простая страница входа в систему, которая отправляется с помощью AJAX. Действие формы — «Вход». Отображение сервлета для входа в систему выглядит следующим образом:

 <servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>devops.ilp1.controllerWithoutDb.UserLoginController</servlet-class>
</servlet>
  

Класс UserLoginController отправляет ошибки ответа, которые отображаются на странице входа. Если errors=»», то пользователь вошел в систему. Затем пользователь перенаправляется, скажем, на localhost: xxxx / Home
Это нормально работает вручную.
Когда я запускаю то же самое с помощью Selenium, после нажатия кнопки отправки страница переходит на localhost: xxxx / Login, и тестовый пример завершается с ошибкой.

HTML:

 <form id="someform" action=Login method="post">
  <input type="text"  class="fadeIn first" name="email" placeholder="Enter Email">
  <input type="password"  class="fadeIn second" name="password" placeholder="Enter Password">
  <button class="fadeIn third" type="submit">Login</button>
</form>
<script>  
$(document).on("submit", "#someform", function(event) {
    var $form = $(this); 
    $.post($form.attr("action"), $form.serialize(), function(response) {
        if(response){
           $('#someMsg').text(response).show().delay(2500).fadeOut("slow");
        }else{
           document.location = "Home"; 
        }
    });
    event.preventDefault(); 
});
  

Тестовый пример Selenium:

 public void loginSuccess() {
    driver.get("http://localhost:6080/ILP_Bookstore");
    WebElement email = driver.findElement(By.name("email"));
    WebElement pass = driver.findElement(By.name("password"));
    WebElement button = driver.findElement(By.xpath("/html/body/div[1]/div/form/button"));         
    email.sendKeys("govind@yahoo.com");
    pass.sendKeys("govind");
    WebDriverWait wait = new WebDriverWait(driver, 5);     
    wait.until(ExpectedConditions.visibilityOf(button));
    button.click();
    assertTrue(driver.getTitle().equals("HomePage"));
}
  

кто-нибудь может помочь?

Комментарии:

1. Вы пробовали подождать после button.click()? прежде чем вы сможете выполнить утверждение для заголовка домашней страницы.

2. да, я тоже пробовал это, но это тоже не сработало,

Ответ №1:

Любое из этих 3 решений может работать легко:

Решение 1: Используйте класс actions, чтобы щелкнуть act.click()

Решение 2: Используйте класс actions, чтобы навести курсор мыши на элемент и нажать act.moveToElement(кнопка).click()

Решение 3: вы можете попробовать использовать JavascriptExecutor

Комментарии:

1. я попытался использовать класс action. это не сработало. Все еще переходим на localhost: xxxx / Login

Ответ №2:

Проблема была с Firefox webdriver. Похоже, что скрипт jQuery не загружался. Я перешел на Chrome, и это сработало.