java - getTitle() 方法在 Chrome 中返回当前页面的标题,但在 Firefox 中使用 Selenium 通过 Java 返回上一页的标题

标签 java selenium selenium-chromedriver geckodriver webdriverwait

登录完成后我需要验证网页的标题。使用 selenium 的 Chrome 驱动程序,登录后页面标题正确,但 Firefox 驱动程序不正确。其余代码保持不变,只是驱动程序从 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 驱动程序,此代码返回“这是登录后的正确主页”,使用 Firefox 驱动程序,此代码返回“登录后的页面不是预期的页面”,因为 getTitle 返回登录页面的标题,而不是登录后的标题。

最佳答案

不同的浏览器以不同的方式呈现HTML DOM。您可以在 Chrome & Firefox on Windows vs Linux (selenium) 中找到相关讨论。在这一点上值得一提的是:

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

它似乎在您的用例中:

  • 使用 ChromeDriver/Chrome 时,页面标题 已在 document.readyState 时在 DOM Tree 内呈现 等于 complete 已达到。

  • 但是在使用GeckoDriver/Firefox时,页面标题DOM 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");
}

关于java - getTitle() 方法在 Chrome 中返回当前页面的标题,但在 Firefox 中使用 Selenium 通过 Java 返回上一页的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436400/

相关文章:

java - Spring MVC 应用程序中用户之间的消息传递

java - 通过 curl 使用 JSTL formatNumber 的浮点舍入错误

ruby - Selenium Webdriver - Ruby 不支持的命令

Selenium 远程 Webdriver 无法与 AWS EC2 一起使用

java - 当我单击带有滑动菜单的菜单图标时崩溃

java - Logback 在 OSGi 容器中包含片段

vba - 通过 Selenium VBA 启动 Chrome 时出现问题

python - 自动化网络任务?

java - 在 Headless Chrome 中打开 GWT 应用程序不起作用

django - Selenium/Django 给出外键错误