Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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-单击/清除/发送键功能不正常,但在调试模式下工作_C#_Visual Studio_Selenium - Fatal编程技术网

C#Selenium-单击/清除/发送键功能不正常,但在调试模式下工作

C#Selenium-单击/清除/发送键功能不正常,但在调试模式下工作,c#,visual-studio,selenium,C#,Visual Studio,Selenium,因此,我遇到了一个问题,即我更改日期字段的命令只有一半的时间有效,我不确定是什么原因导致了这一问题。然而,当我在调试模式下运行它们并一步一步地遍历该方法时,它会执行它应该执行的操作。下面是我的方法中的代码: PermitExpirationRangeStart = DateTime.Today.AddDays(121).ToShortDateString(); PermitExpirationRangeEnd = DateTime.Today.AddDays(150).ToShortDateS

因此,我遇到了一个问题,即我更改日期字段的命令只有一半的时间有效,我不确定是什么原因导致了这一问题。然而,当我在调试模式下运行它们并一步一步地遍历该方法时,它会执行它应该执行的操作。下面是我的方法中的代码:

PermitExpirationRangeStart = DateTime.Today.AddDays(121).ToShortDateString(); 
PermitExpirationRangeEnd = DateTime.Today.AddDays(150).ToShortDateString();
//Wait until we have the facility name.
//WaitFor(() => !string.IsNullOrEmpty(FindElement(By.Id("ctl32_ctl04_ctl05_txtValue")).GetAttribute("name")));
Sleep(5000);

FindElement(By.Id("ctl32_ctl04_ctl03_txtValue")).Clear();
FindElement(By.Id("ctl32_ctl04_ctl03_txtValue")).SendKeys(PermitExpirationRangeStart);
FindElement(By.Id("ctl32_ctl04_ctl05_txtValue")).Clear();
FindElement(By.Id("ctl32_ctl04_ctl05_txtValue")).SendKeys(PermitExpirationRangeEnd);
我试图测试的有问题的页面是下面的代码(这只是日期字段之一):



我在测试中尝试过重新排列代码行,甚至在对元素执行Clear或SendKeys方法之前,我尝试过将元素设置为
IWebElements
。谷歌搜索不会产生有助于解决这个问题的结果。

答案很可能是:您需要在代码中引入等待

在调试模式下,您每次“缓慢”执行一步代码,浏览器实例有足够的时间响应

请尝试引入“等待”机制

WebDriverWait wait=newwebdriverwait(驱动程序,30);
wait.until(预期条件.元素的可视性)(通过.id(“定位器”))


对于您的
ctl32\u ctl04\u ctl03\u txtValue
ctl32\u ctl04\u ctl05\u txtValue
元素,您可能由于执行速度而面临问题,这里由于执行速度快,selenium有时在设置值之前不关注输入。您应该尝试使用
。单击()
为元素提供焦点,然后按如下方式设置值:-

IWebElement el = driver.FindElement(By.Id("ctl32_ctl04_ctl03_txtValue"));
el.Click();
el.Clear();
el.SendKeys(PermitExpirationRangeStart);

IWebElement el1 = FindElement(By.Id("ctl32_ctl04_ctl05_txtValue"));
el1.Click();
el1.Clear();
el1.SendKeys(PermitExpirationRangeEnd);
注意:无需在同一页面中反复查找元素。您只需要找到一个时间,并将其存储到变量中以供进一步操作


希望对您有所帮助。:)

如果您能够输出一些日志,请尝试将日志放在find元素之间。它可以帮助您缩小问题的范围。将输出日志放在find元素之间是什么意思?当我试图找出测试时出现的问题时,我确实输入了“console.writeline”命令,以查看执行了什么和没有执行什么。遗憾的是,这并没有起到多大作用。
IWebElement el = driver.FindElement(By.Id("ctl32_ctl04_ctl03_txtValue"));
el.Click();
el.Clear();
el.SendKeys(PermitExpirationRangeStart);

IWebElement el1 = FindElement(By.Id("ctl32_ctl04_ctl05_txtValue"));
el1.Click();
el1.Clear();
el1.SendKeys(PermitExpirationRangeEnd);
Element.SendKeys("");
Element.SendKeys(number);