【问题标题】:How to confirm the page title using selenium?如何使用 selenium 确认页面标题?
【发布时间】:2022-02-01 17:05:32
【问题描述】:
      @Test(priority = 0)
      public void test() throws Exception {
        driver.get(baseUrl + "/");
        driver.findElement(By.name("email")).clear();
        driver.findElement(By.name("email")).sendKeys("lanka@ensiz.com");
        driver.findElement(By.name("password")).clear();
        driver.findElement(By.name("password")).sendKeys("123456");
        driver.findElement(By.xpath("//button[contains(text(),'Sign In')]")).click();

      }
      @Test(priority = 1)
      public void verifyHomepageTitle(){
              String expectedTitle = "Placer Admin - Home";
              String actualTitle = driver.getTitle();
              Assert.assertEquals(actualTitle, expectedTitle);     
      }
      @AfterClass(alwaysRun = true)
      public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
          fail(verificationErrorString);
        }
      }    

我是自动化测试的新手。我想确保有效的用户登录。为此我正在尝试验证页面的标题。但是我的测试一直失败,因为它是在有效用户之前执行的去仪表板。我该如何测试这个?我能知道这段代码的正确修改吗?

请帮忙..谢谢

【问题讨论】:

  • 登录后需要等待一段时间
  • 页面标题如何帮助您验证有效用户?
  • @cruisepandey 可能每个用户(组)的标题已更改
  • @Anand 这是标题 Placer Admin - Home ,似乎不适用于单个用户
  • 我只是想测试输入的有效注册用户。所以我在我的新代码中将其重定向到导航栏。有什么比这更好的方法吗?

标签: java selenium selenium-webdriver automated-tests


【解决方案1】:

您可以做的是,在仪表板页面上选择一个始终存在但不在登录页面上的元素。例如,菜单项或标题。

然后在登录测试结束时像这样创建一个等待,这样测试只有在仪表板加载后才完成:

 WebDriverWait wait = new WebDriverWait(driver, 5);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("XPath here")));

这将等待最多 5 秒以加载仪表板。当我在 C# 中执行所有操作时,语法可能在某处出错。

【讨论】:

【解决方案2】:

使用此代码在我的机器上运行良好:

public class User3806999 {

    WebDriver driver;
    WebDriverWait wait;

    @BeforeClass
    public void setUpClass(){
        System.setProperty("webdriver.chrome.driver", "F:\\Automation\\chromedriver.exe");
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver,30); 
        driver.manage().window().maximize();
        driver.get("https://test.admin.placer.life/login");
    }

    @Test()
    public void testLogin() throws Exception {
        driver.findElement(By.name("email")).clear();
        driver.findElement(By.name("email")).sendKeys("lanka@ensiz.com");
        driver.findElement(By.name("password")).clear();
        driver.findElement(By.name("password")).sendKeys("123456");
        driver.findElement(By.xpath("//button[contains(text(),'Sign In')]")).click();
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("user_menu"))));
        //Assert something here 
    }

    @Test(dependsOnMethods ={"testLogin"})
    public void verifyHomepageTitle(){
            String expectedTitle = "Placer Admin - Home";
            String actualTitle = driver.getTitle();
            Assert.assertEquals(actualTitle, expectedTitle);     
    }

    @AfterClass(alwaysRun = true)
    public void tearDown() throws Exception {
          //logout here 

      }
}

【讨论】:

  • 混合隐式和显式等待并不是一个好主意 - stackoverflow.com/questions/29474296/…
  • @Grasshopper:我同意你的看法!我将删除该行
  • @Grasshopper:这是一个问题,如果我要删除隐式等待,那么这两种方法都会失败,但如果我将隐式等待和显式等待一起保留,那么测试就会通过有什么见解吗?
  • 在调用显式等待之前将隐式等待设置为 0。显式等待后将隐式等待设置回原始值。您还可以创建一个 util 方法来处理所有显式等待。
  • @Grasshopper :这不是等待的混合物吗?
【解决方案3】:

在断言之前使用如下的显式等待:

WebDriverWait wait = new WebDriverWait(driver, 15);
wait.until(ExpectedConditions.titleContains(expectedTitle);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多