Selenium - FireFox / Marionette驱动程序没有做等待。直到

时间:2016-08-09 17:27:08

标签: c# selenium firefox wait firefox-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驱动程序没有做任何等待,所以等待现有的元素也无法正常工作

1 个答案:

答案 0 :(得分:0)

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

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

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

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