登录完成后我需要验证网页的标题。使用 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/