簡體   English   中英

Java-硒-使用斷言時的行為不一致

[英]Java - Selenium - Inconsistent behavior when using Assert

嘗試斷言顯示錯誤消息時,我遇到一些奇怪的不一致行為。

我有2個測試,除了將不同的值發送到表單中並檢查不同的錯誤消息外,它們都在做相同的事情。

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\dan.febry\\Desktop\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();

        driver.get("https://mywebsite.com");

        driver.findElement(By.id("Identifier")).sendKeys("username");
        driver.findElement(By.id("Password")).sendKeys("password");
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[2]/div[1]/div/form/button")).click();

        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/button")).click();
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/div/form[1]/button")).click();

        driver.findElement(By.id("OldPassword")).sendKeys("Password!23");
        driver.findElement(By.id("NewPassword")).sendKeys("Password123!");
        driver.findElement(By.id("ConfirmPassword")).sendKeys("");
        driver.findElement(By.xpath("//*[@id=\"form0\"]/div[5]/div/button")).click();

        List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"form0\"]/div[4]/ul/li"));
        Assert.assertEquals(allElements.size(), 1);
        Assert.assertEquals(allElements.get(0).getText(), "The new password and confirmation password do not match.");

        // TODO Verify failed counter has not gone up.

        driver.close();

    }

    @Test
    public void ChangePasswordCurrentPasswordIncorrect() {

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\dan.febry\\Desktop\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();

        driver.get("https://mywebsite.com");

        driver.findElement(By.id("Identifier")).sendKeys("username");
        driver.findElement(By.id("Password")).sendKeys("password");
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[2]/div[1]/div/form/button")).click();

        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/button")).click();
        driver.findElement(By.xpath("/html/body/div/div[1]/div[1]/div/div[4]/div/div/form[1]/button")).click();

        driver.findElement(By.id("OldPassword")).sendKeys("Password@123");
        driver.findElement(By.id("NewPassword")).sendKeys("Password123!");
        driver.findElement(By.id("ConfirmPassword")).sendKeys("Password123!");
        driver.findElement(By.xpath("//*[@id=\"form0\"]/div[5]/div/button")).click();

        List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"form0\"]/div[4]/ul/li"));
        Assert.assertEquals(allElements.size(), 1);
        Assert.assertEquals(allElements.get(0).getText(), "Incorrect password.");

        // TODO Verify failed counter has gone up.
        // TODO Reset failed counter value

        driver.close();

    }`

第一個測試運行,通過並正確聲明了文本。 但是,第二次測試失敗,並顯示以下錯誤:

java.lang.AssertionError:預期為[錯誤密碼。]但發現為[]

HTML是:

 <div class="validation-summary-errors text-danger" data-valmsg-summary="true"> <ul> <li>Incorrect password.</li> </ul> </div> <div class="text-danger validation-summary-errors" data-valmsg-summary="true"> <ul> <li>The new password and confirmation password do not match.</li> </ul> </div> 

PS。 不知道我是否錯過了這里的一些重要信息,所以讓我知道是否應該提供有關此問題的更多信息。

可能無法獲取正確的Xpath因此返回零列表。

代替這個xpath

driver.findElements(By.xpath("//*[@id=\"form0\"]/div[4]/ul/li"))

Xpath嘗試,並花一些時間WebDriverWait查找元素

 WebDriverWait wait = new WebDriverWait(driver, 30);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='validation-summary-errors text-danger']/ul/li")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM