【问题标题】:Selenium - FireFox/Marionette driver not doing wait.UntilSelenium - FireFox/Marionette 驱动程序不等待。直到
【发布时间】:2016-08-09 17:27:07
【问题描述】:

自从更新到 Marionette 驱动程序。 Firefox 不再等待。 基本上我希望它登录,等待页面加载,然后通过在页面上找到“注销”来检查它是否已登录。这是我的设置

// navigate to url "http://..."
// Find Log In button and .Click()

WebDriverWait wait = new WebDriverWait(driver, System.TimeSpan.FromSeconds(30));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

// Assert if the page contains "Log out"

发生的事情是在它点击登录之后,它没有等待页面加载,所以它会抛出一个错误,因为它找不到“注销”

我强调代码适用于较旧的 Firefox 驱动程序(不是 Marionette)和 Chrome 的驱动程序。还有其他人遇到新的 Firefox 驱动程序不等待的问题吗?

抱歉,我应该更清楚一点,Firefox 驱动程序没有进行任何等待,因此等待现有元素也不起作用

【问题讨论】:

  • 那你为什么不等待注销按钮而不是等待readyState??
  • 请提供更多您正在使用的代码、登录和注销按钮的 HTML 以及您遇到的错误。
  • 我可以提供更多代码,但目前不能。正如我所说,旧的 Firefox 驱动程序和 chrome 驱动程序可以工作并且会等待,所以假设木偶的工作方式相同,那么如果它适用于其他驱动程序,我的代码应该是正确的
  • @JeffC - 错误是它没有找到“注销”所以断言失败但它失败的唯一原因是因为它没有等待页面在单击登录后重新加载,它仍在登录页面上时试图立即找到“注销”
  • 阅读这个?可能是同样奇怪的问题.. stackoverflow.com/questions/27114626/…

标签: c# selenium firefox wait firefox-marionette


【解决方案1】:

您的测试失败的原因是 Jonny 在 cmets 中所说的。您正在等待页面在登录操作后立即准备就绪,因为您刚刚与之交互,它已经“准备就绪”。您想要做的是对注销元素进行隐式等待。这可以通过几种不同的方法来完成。

wait.Until(ExpectedConditions.ElementExists(By.XPath(xpath)));

wait.Until(ExpectedConditions.ElementExists(By.CssSelector(csspath)));

其中任何一个都将在页面上执行隐式等待,等待最多 30 秒(如您的等待元素中定义)以找到注销元素。

【讨论】:

  • 问题是它根本不做等待,所以等待一个元素也不起作用,我认为这可能是木偶驱动程序中的一个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2013-04-12
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多