Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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# 在基于url单击之前,等待在Selenium WebDriver中加载页面_C#_Url_Selenium_Wait - Fatal编程技术网

C# 在基于url单击之前,等待在Selenium WebDriver中加载页面

C# 在基于url单击之前,等待在Selenium WebDriver中加载页面,c#,url,selenium,wait,C#,Url,Selenium,Wait,我必须写一个小测试,我被卡住了,因为首先我必须在页面上搜索一些东西,然后从下拉列表中排序,然后从动态列表中单击一个项目 但是,在单击dropdwon列表中的某个项目之前,将注册单击。目前的问题是,我能找到的排序页面和未排序页面之间的唯一区别是页面地址,所选的排序类型具有class=selected added,仅此而已 隐式等待不起作用,因为列表上的项仍然具有相同的类,除了顺序之外没有任何更改,并且它将它们视为已正确加载。我想不出有什么办法可以让我等待。我能想到的唯一解决方案是等待加载特定的ur

我必须写一个小测试,我被卡住了,因为首先我必须在页面上搜索一些东西,然后从下拉列表中排序,然后从动态列表中单击一个项目

但是,在单击dropdwon列表中的某个项目之前,将注册单击。目前的问题是,我能找到的排序页面和未排序页面之间的唯一区别是页面地址,所选的排序类型具有class=selected added,仅此而已


隐式等待不起作用,因为列表上的项仍然具有相同的类,除了顺序之外没有任何更改,并且它将它们视为已正确加载。我想不出有什么办法可以让我等待。我能想到的唯一解决方案是等待加载特定的url,但我找不到这样做的解决方案。

因为您已经尝试了隐式等待,所以有一个不错的方法可以使用。不要在C端等待,而是注入一个JavaScript变量并轮询它

// once 
var script = "window.__mySecretGlobal = 'false'; " + 
             "window.addEventListener('load', function(){ " +
                  "window.__mySecretGlobal = 'true'; " + 
             "});";

((IJavaScriptExecutor)driver).ExecuteScript(script);
现在,JavaScript将设置一个变量,您可以轮询该变量:

async Task WaitForLoad(){
    var loaded = false;
    var script = "return window.__mySecretGlobal"
    while(!loaded){
        var res = (string)((IJavaScriptExecutor)driver).ExecuteScript(script);
        if(res.Equals("true")) return; // it's loaded!
        await Task.Delay(100); // try again in 100 ms
    }
}
对于更完整的解决方案,您可能希望将超时和取消令牌作为可选参数传递给该代码


这不是最漂亮的代码,但它在生产中默默地为我们工作了多年,隐式和显式等待都失败了

我应该把它粘贴到应该等待的地方,还是应该对您的代码做些其他的事情?它给我带来了很多错误,我不太确定如何修复它们。@owiec第二部分是一种方法。也许可以给出更多具体的例子。显示下拉列表的HTML。让我们看看你尝试了什么,以及它们是如何不起作用的。