Selenium После sendkey сделайте некоторую проверку - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в Selenium, TestNG и Stackoverflow.

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

    WebDriver driver;

    @DataProvider(name= "testdata")
    public static Object[][] loginData(){

        return new Object[][]{{"username1", "123"}, {"username2", "4211"}};
    }

    @BeforeTest
    public void configure(){
      ....
    }

    @Test(dataProvider = "testdata")
    public void testmethod(String uname, String password){

         WebElement usernameTextbox = driver.findElement(By.id("username"));
    		 usernameTextbox.sendKeys(uname);

   WebElement passwordTextbox = driver.findElement(By.id("username"));
    		 passwordTextbox.sendKeys(uname);
         
         driver.manage().timeouts().implicitlyWait(2, TimeUnit.MICROSECONDS);
         
Assert.assertTrue(if(usernameTextbox.contains("[a-zA-Z0-9]+") &&  passwordTextbox.contains("[0-9]+") == true));
    			

PS: любые входные данные будут оценены.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Итак, чтобы попытаться ответить на исходный вопрос, ваш код может выглядеть следующим образом:1. Использование getAttribute («значение»)2. Построение утверждения - вам не нужно переносить условие в условие if, так как функция contains () вернет вам true или false:

WebDriver driver;

@DataProvider(name= "testdata")
public static Object[][] loginData(){
    return new Object[][]{{"username1", "123"}, {"username2", "4211"}};
}

@BeforeTest
public void configure(){
    ....
}

@Test(dataProvider = "testdata")
public void testmethod(String uname, String password){
    WebElement usernameTextbox = driver.findElement(By.id("username"));
        usernameTextbox.sendKeys(uname);

    WebElement passwordTextbox = driver.findElement(By.id("username"));
        passwordTextbox.sendKeys(uname);

    driver.manage().timeouts().implicitlyWait(2, TimeUnit.MICROSECONDS);

    Assert.assertTrue(usernameTextbox.getAttribute("value").contains("[a-zA-Z0-9]+") &&  passwordTextbox.getAttribute("value").contains("[0-9]+"));

HTH

0 голосов
/ 16 мая 2018

По вашему вопросу сразу после вызова sendKeys() вы хотите сделать некоторые утверждения.

Здесь стоит упомянуть, что при вызове sendKeys() на <input> узле / теге / поле HTML DOM не сразу обновляется с помощью значение / символов , которые вы только что ввели в большинстве случаев (из грубых есть исключительные случаи). Двигаясь вперед, когда вы вызываете click() или submit() на элементе <button> или аналогичном <input>, соответствующее событие onclick этого элемента <input> обновляет HTML DOM и значение / символов , ранее отправленные через sendKeys(), настраиваются в пределах HTML DOM .

Если только значение / символов не размещено в DOM Tree Selenium не будет возможность взаимодействовать с ними.

В соответствии с вашим блоком кода, вы заполнили поле passwordTextbox значением String uname следующим образом:

passwordTextbox.sendKeys(uname);

Это значение / набор символов все еще изменчиво и доступно для редактирования (может быть перезаписано / очищено / удалено) следующим образом:

passwordTextbox.clear();
passwordTextbox.sendKeys("Emma E");

По существу, Assert методы могут быть вызваны для text , которые являются частью HTML DOM . В качестве примера вы можете использовать следующие Assert для заголовка страницы , заголовка таблицы и т. Д .:

Assert.assertTrue(if(pageHeaderElement.contains("[a-zA-Z0-9]+") &&  tableHeaderElement.contains("[0-9]+") == true));
0 голосов
/ 16 мая 2018

Попробуйте реализовать явное ожидание в Вашем коде.Это означает, что Вы ждете, чтобы установить какое-то условие, вот пример того, как это сделать:

Но я предлагаю, чтобы Вы утверждали, если есть какие-либо сообщения об ошибках (метки, диапазон или что-то еще, чтопоявляется сообщение о том, что с электронной почтой или паролем что-то не так)

Вот как я бы это сделал:

        WebDriver driver;

        @DataProvider(name= "testdata")
        public static Object[][] loginData(){
            return new Object[][]{{"username1", "123"}, {"username2", "4211"}};
        }

        @BeforeTest
        public void configure(){
          driver = new WebDriver();
          driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); //this is wait which will wait until driver throws exception (that is not found eg."NoSuchElementException")
        }

        @Test(dataProvider = "testdata")
        public void testmethod(String uname, String password){

             WebElement usernameTextbox = driver.findElement(By.id("usernameID"));
                 usernameTextbox.sendKeys(uname);

       WebElement passwordTextbox = driver.findElement(By.id("passwordID"));
                 passwordTextbox.sendKeys(password); //here is where You've sent wrong param


// if You know You will get error label or something use this
       WebDriverWait wait = new WebDriverWait(driver, 10); //wait for max 10 sec, and wait for error element defined bellow
       WebElement errorElement = wait.until(ExpectedConditions. presenceOfElementLocated(By.id("someErrorElementId")));  //(or ExpectedConditions.textToBePresentInElement(..)), see what better suites You

// If You're expecting error than use this assert
        Assert.assertTrue(errorElement.isDisplayed(),"There should be error message!")

// but If You're expecting that there should not be any error than use this assert
        Assert.assertFalse(errorElement.isDisplayed(),"There shouldn't be no error messages!")
    }

откорректируйте этот код, но, по сути, это логика.

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