Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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/2/python/365.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# 如果WebElement仍然没有加载,如何在没有睡眠的情况下写入延迟?_C#_Selenium_Selenium Webdriver - Fatal编程技术网

C# 如果WebElement仍然没有加载,如何在没有睡眠的情况下写入延迟?

C# 如果WebElement仍然没有加载,如何在没有睡眠的情况下写入延迟?,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我为web应用程序编写自动测试,但我遇到了延迟问题。我不想在脚本中使用睡眠,所以我写了下一个: driver.FindElement(By.ClassName("MyClassName")).Displayed 如果它工作正常(也可以使用Enabled),但是我有几个视图在3-5秒内加载,所以我收到了NoSuchElementException,因为它试图查找元素,而元素仍然没有加载。 我知道这个问题可以通过增加简单的睡眠来解决,但我不想这样做 除了睡觉,还有别的解决办法吗

我为web应用程序编写自动测试,但我遇到了延迟问题。我不想在脚本中使用睡眠,所以我写了下一个:

driver.FindElement(By.ClassName("MyClassName")).Displayed
如果它工作正常(也可以使用Enabled),但是我有几个视图在3-5秒内加载,所以我收到了NoSuchElementException,因为它试图查找元素,而元素仍然没有加载。 我知道这个问题可以通过增加简单的睡眠来解决,但我不想这样做

除了睡觉,还有别的解决办法吗

提前谢谢

在C#中,我不确定,但在python中,我们有预期的条件,要等到下课

WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,'//span[contains(text(),"Enter a gift card, voucher or promotional code")]'))).click()
上述命令将在抛出错误之前等待30秒,并每隔0.5秒检查上述元素是否可单击


检查EC(预期条件)并等待c#selenium模块中的API

您可以尝试类似的方法。如果愿意,可以更改方法时间,甚至可以将其作为变量并向其传递值

    call - WaitForElementDisplayed_byXPathTime("//a[@class='myClass");

    public static void WaitForElementDisplayed_byXPathTime(string value)
    {
        try
        {
            var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
            wait.Until(webDriver => webDriver.FindElement(By.XPath(value)).Displayed);
        }
        catch (Exception) 
         { 
           //add error handling;
           throw; 
         }
       
    }
}

将代码放入异步任务并执行
wait task.Delay(nnn)我已经从这个问题和你的新问题的标题中删除了标签,因为它违反了本网站的标签准则(该准则规定,除非标签是句子的有机组成部分,否则你不应该在问题标题中放置标签)。仍然没有触及到例外,它不会出现,只是抛出一个例外。事实上,这就是问题所在。系统用元素加载页面需要花费时间。我们要花多少时间?如果您添加了sleep-in线程,它会工作吗?如果睡眠有效,你就知道你的元素是好的。您还可以尝试在同时加载的页面上查找其他元素。你在iframe中寻找的元素是偶然的吗?事实上,我猜我做错了什么。睡眠很好,我设置为10秒。它没有等待足够的时间,因此我接收或不接触元素或元素是不可单击的。