1

自从更新到 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 驱动程序没有进行任何等待,因此等待现有元素也不起作用

4

1 回答 1

0

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

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

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

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

于 2016-08-16T17:03:35.670 回答