getTitle() 方法 returns 当前页面的标题 Chrome 但前一页的标题 returns 使用 Selenium 通过 Java 的 Firefox

getTitle() method returns title of current page with Chrome but returns title of previous page with Firefox using Selenium through Java

我需要在登录完成后验证网页标题。使用 Chrome Driver 用于 selenium,登录后页面的标题是正确的,但不是 firefox driver。其余代码保持不变,只是 driver 从 chrome 更改为 firefox。

public void verifyLoginPage()
{
    String homepage= "Guru99 Bank Manager HomePage";

    if (driver.getTitle().equals(homepage))
    {
        System.out.println("Its the correct Homepage after Login");
    }
    else
    {
        System.out.println("Page after login is not the intended one");
    }
}

使用 Chrome driver 此代码 returns “它是登录后的正确主页”和使用 firefox driver 此代码 returns “登录后的页面不是预期的”,因为 getTitle returns 登录页面的标题,而不是登录后的标题。

能否请您尝试执行以下代码,让我们知道它是否有效。

打开chrome或Firefox驱动程序后,请添加以下代码并查看-

driver.manage().timeouts().implicitlyWait(10
driver.navigate().to("http://sitename.com");
String actualTitle = driver.getTitle();
driver.manage().window().maximize();
String expectedTitle = "page title to be verified";
if(actualTitle.equalsIgnoreCase(expectedTitle))
System.out.println("Title Matched");
else
System.out.println("Title didn't match");
driver.close();
driver.quit();

不同的浏览器呈现 HTML DOM in a different way. You can find a relevant discussion in Chrome & Firefox on Windows vs Linux (selenium)。在这一点上值得一提的是:

  • ChromeDriver / Chrome 基于OSS 方言。
  • GeckoDriver / Firefox 基于 W3C 方言。

它似乎在你的用例中:

  • 在使用ChromeDriver / Chrome时, document.readyState 等于[=58]时,页面标题已经在 DOM Tree 中呈现=] complete 达到.

  • 但是在使用 GeckoDriver / Firefox 时,Page Title notDOM Tree 中渲染到 document.readyState 等于complete得到。

解决方案

需要诱导WebDriverWait标题包含,可以使用以下解决方案:

public void verifyLoginPage()
{
    new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Guru99");
    String homepage= "Guru99 Bank Manager HomePage";
    if (driver.getTitle().equalsIgnoreCase(homepage))
        System.out.println("Its the correct Homepage after Login");
    else
        System.out.println("Page after login is not the intended one");
}