Selenium在sendkey之后,做一些验证

时间:2018-05-16 08:16:09

标签: selenium selenium-webdriver testng

我是Selenium,TestNG和Stackoverflow的新手。

在sendkeys之后,我想做一些验证。如果验证为真,则断言为真。我知道这不是编写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 :(得分:0)

尝试在代码中实现显式等待。这意味着,你等待设置一些条件,这里是如何管理这个的例子:

但我的建议是,你断言是否有一些错误消息(标签,范围或任何看起来说电子邮件或传递错误的内容)

所以我会这样做:

        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!")
    }

调整此代码,但基本上这是逻辑。

答案 1 :(得分:0)

因此,要尝试回答原始问题,您的代码可能如下所示:
 1.使用getAttribute(“value”)
 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

答案 2 :(得分:0)

根据您的问题,在调用sendKeys()之后,您想要做一些断言。

此时值得一提的是,当您在sendKeys()节点/标记/字段上调用<input>时,HTML DOM不会立即使用值更新 / 字符(粗略有特殊情况)。当您在click()或类似submit()元素上调用<button><input>时,向前移动此<input>元素的关联onclick事件会更新之前通过sendKeys()发送的 HTML DOM / 字符 HTML DOM 中进行了调整。

除非DOM Tree Selenium 中未包含 / 字符,否则将无法与它们进行交互。

根据您的代码块,您已使用passwordTextbox String值填充uname字段,如下所示:

passwordTextbox.sendKeys(uname);

/ characterset 仍然具有易失性和可编辑性(可以覆盖/清除/删除),如下所示:

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

基本上,可以在文本上调用Assert方法,这些方法是 HTML DOM 的一部分。例如,您可以将以下Assert用于页面标题表格标题等:

Assert.assertTrue(if(pageHeaderElement.contains("[a-zA-Z0-9]+") &&  tableHeaderElement.contains("[0-9]+") == true));