Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium-FireFox/Marionette驱动程序未执行等待。直到_C#_Selenium_Firefox_Wait_Firefox Marionette - Fatal编程技术网

C# Selenium-FireFox/Marionette驱动程序未执行等待。直到

C# Selenium-FireFox/Marionette驱动程序未执行等待。直到,c#,selenium,firefox,wait,firefox-marionette,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 => ((

自从更新到木偶驱动程序。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驱动程序(不是木偶),也适用于Chrome的驱动程序。还有谁对新的Firefox驱动程序不执行等待操作有疑问


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

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

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

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

其中任何一个都将在页面上执行隐式等待,等待长达30秒(在等待元素中定义)的时间,以便找到注销元素。

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

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

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

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

那么,为什么不等待注销按钮而不是等待readyState?请提供您正在使用的更多代码,登录和注销按钮的HTML,我可以提供更多的代码,但现在不行。正如我所说,旧的Firefox驱动程序和chrome驱动程序可以工作并进行等待,因此假设木偶的工作原理相同,那么如果我的代码适用于另一个,那么我的代码应该是正确的drivers@JeffC-错误是找不到“注销”因此,断言失败了,但它失败的唯一原因是,它没有在单击“登录”后等待页面重新加载,而是试图在仍在登录页面上时立即找到“注销”读取此信息?可能是同一个奇怪的问题。。那么,你为什么不等待注销按钮而不是等待readyState?请提供更多你正在使用的代码,登录和注销按钮的HTML,以及你得到的错误。我可以提供更多代码,但目前还没有。正如我所说,旧的Firefox驱动程序和chrome驱动程序可以工作并进行等待,因此假设木偶的工作原理相同,那么如果我的代码适用于另一个,那么我的代码应该是正确的drivers@JeffC-错误是找不到“注销”因此,断言失败了,但它失败的唯一原因是,它没有在单击“登录”后等待页面重新加载,而是试图在仍在登录页面上时立即找到“注销”读取此信息?可能是同一个奇怪的问题。。问题是它根本不做等待,所以等待一个元素也不起作用,我认为这可能是木偶驱动程序中的一个错误。问题是它根本不做等待,所以等待一个元素也不起作用,我认为这可能是木偶驱动程序中的一个错误。