Java-Selenium-使用断言时的不一致行为

Java-Selenium-使用断言时的不一致行为,java,selenium,Java,Selenium,当我试图断言显示了错误消息时,我遇到了一些奇怪的、不一致的行为 我有两个测试,它们都在做相同的事情,除了向表单发送不同的值和检查不同的错误消息 System.setProperty("webdriver.chrome.driver", "C:\\Users\\dan.febry\\Desktop\\chromedriver_win32\\chromedriver.exe"); WebDriver driver = new ChromeDriver();

当我试图断言显示了错误消息时,我遇到了一些奇怪的、不一致的行为

我有两个测试,它们都在做相同的事情,除了向表单发送不同的值和检查不同的错误消息

        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();

    }`
System.setProperty(“webdriver.chrome.driver”、“C:\\Users\\dan.febry\\Desktop\\chromedriver\u win32\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
driver.manage().window().maximize();
驱动程序。获取(“https://mywebsite.com");
driver.findElement(By.id(“标识符”)).sendKeys(“用户名”);
driver.findElement(By.id(“密码”)).sendKeys(“密码”);
findElement(By.xpath(“/html/body/div/div[1]/div[1]/div/div[2]/div[1]/div/form/button”))。单击();
findElement(By.xpath(“/html/body/div/div[1]/div[1]/div/div[4]/div/button”))。单击();
findElement(By.xpath(“/html/body/div/div[1]/div[1]/div/div[4]/div/div/div/form[1]/button”)。单击();
driver.findElement(By.id(“旧密码”)).sendKeys(“密码!23”);
driver.findElement(By.id(“NewPassword”)).sendKeys(“Password123!”);
driver.findElement(By.id(“ConfirmPassword”)).sendKeys(“”);
driver.findElement(By.xpath(“//*[@id=\“form0\”]/div[5]/div/button”))。单击();
List-allegements=driver.findElements(By.xpath(“/*[@id=\“form0\”]/div[4]/ul/li”);
Assert.assertEquals(allegements.size(),1);
Assert.assertEquals(Allegements.get(0.getText(),“新密码和确认密码不匹配”);
//TODO验证失败计数器未上升。
driver.close();
}
@试验
public void changePasswordCurrentPasswordError(){
System.setProperty(“webdriver.chrome.driver”,“C:\\Users\\dan.febry\\Desktop\\chromedriver\u win32\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
driver.manage().window().maximize();
驱动程序。获取(“https://mywebsite.com");
driver.findElement(By.id(“标识符”)).sendKeys(“用户名”);
driver.findElement(By.id(“密码”)).sendKeys(“密码”);
findElement(By.xpath(“/html/body/div/div[1]/div[1]/div/div[2]/div[1]/div/form/button”))。单击();
findElement(By.xpath(“/html/body/div/div[1]/div[1]/div/div[4]/div/button”))。单击();
findElement(By.xpath(“/html/body/div/div[1]/div[1]/div/div[4]/div/div/div/form[1]/button”)。单击();
driver.findElement(By.id(“旧密码”)).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”))。单击();
List-allegements=driver.findElements(By.xpath(“/*[@id=\“form0\”]/div[4]/ul/li”);
Assert.assertEquals(allegements.size(),1);
Assert.assertEquals(Allegements.get(0.getText(),“密码不正确”);
//TODO验证失败计数器已上升。
//TODO重置失败的计数器值
driver.close();
}`
第一个测试运行、通过并正确断言文本。但是,第二次测试失败,并显示以下错误:

java.lang.AssertionError:应为[密码不正确],但找到[]

HTML是:


  • 密码不正确
  • 新密码和确认密码不匹配

可能无法获取正确的
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")))

您确定定位器在第二种情况下是正确的吗?我会将其更改为CSS选择器,如,
#form0 div.text-danger li
,它似乎适合这两种情况。谢谢Jeff。是的,是我使用的xpath导致了这个问题。谢谢Kajal!是xpath导致了问题。我添加了WebDriverWait并更改了xpath,它成功了。如果我在代码中保留WebDriverWait,但保留旧的xpath,则在尝试查找元素时,它会超时。@dannyfebry:很高兴帮助您。