所以我遇到了一个问题,我的命令更改日期字段只能工作一半时间而且我不确定是什么导致了这一点。然而,当我在调试模式下运行它们并逐步通过该方法时,它会执行它想要做的事情。以下是我方法中的代码:
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);
我正在尝试测试的页面是下面的代码(这只是日期字段之一):
<td class="ParamEntryCell" style="padding-right:0px;">
<div id="ctl32_ctl04_ctl05">
<div style="white-space:nowrap;" onactivate="event.cancelBubble=true;">
<input id="ctl32_ctl04_ctl05_txtValue" class="null" type="text" size="28" value="12/22/2016" name="ctl32$ctl04$ctl05$txtValue"/>
<input id="ctl32_ctl04_ctl05_ddDropDownButton" type="image" style="cursor:pointer;" title="Select a value" alt="Select a value" name="ctl32$ctl04$ctl05$ddDropDownButton" src="/Reports/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=12.0.4422.0&Name=Microsoft.Reporting.WebForms.calendar.gif"/>
</div>
</div>
</td>
我已经尝试在我的测试中重新排列代码行,我甚至尝试将元素设置为IWebElements
,然后才对其执行Clear或SendKeys
方法。谷歌搜索没有产生任何有助于解决这个问题的结果。
答案 0 :(得分:1)
答案很可能是:您需要在代码中引入等待。
在调试模式下,您一步一步“慢慢”执行代码,浏览器实例有足够的时间来响应。
请尝试引入“等待”机制。
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("locator")));
适用于您的ctl32_ctl04_ctl03_txtValue
和ctl32_ctl04_ctl05_txtValue
元素
答案 1 :(得分:1)
由于执行速度的原因,您可能面临问题。由于快速执行,有时候selenium在设置值之前不会关注输入。在设置值之前,您应该尝试使用.Click()
为元素提供焦点: -
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);
注意:无需在同一页面中反复查找元素。您只需要找到一次并存储到变量中以进行进一步操作。
希望它有所帮助.. :)
答案 2 :(得分:0)
Element.SendKeys("");
Element.SendKeys(number);