【问题标题】:Selenium can not send keys at datetime textboxSelenium 无法在日期时间文本框中发送密钥
【发布时间】:2019-11-01 04:09:36
【问题描述】:

我有一个经过自动化测试的网络应用程序,目前我有以下 HTML 内容:

<td>
<input name="ctl00$ctl00$BaseRightContent$MainRightContent$FromTextBox" type="text" value="19.06.2019" id="ctl00_ctl00_BaseRightContent_MainRightContent_FromTextBox" class="wideUserInput">
                
<input type="hidden" name="ctl00$ctl00$BaseRightContent$MainRightContent$FromTextBoxMasked_ClientState" id="ctl00_ctl00_BaseRightContent_MainRightContent_FromTextBoxMasked_ClientState">
</td>

对于我的硒测试,我使用以下解决方法:

 if (employmentParam.StartDate != null)
        {
            driver.FindElement(By.Id("ctl00_ctl00_BaseRightContent_MainRightContent_FromTextBox")).Clear();
            driver.FindElement(By.Id("ctl00_ctl00_BaseRightContent_MainRightContent_FromTextBox")).SendKeys(employmentParam.StartDate); //Here is my object (string) Example: employmentParam.StartDate --> 11.02.2100
        }

目前我遇到的问题是我的 selenium 只插入了“21.00.2002”而不是给定的参数“11.02.2100”这就是 webelement 的样子:

【问题讨论】:

  • 我觉得这是由于 Selenium 发送击键时文本光标所在的位置。比较 Selenium “键入”时文本光标的位置与您在字段中手动键入时的文本光标位置。有区别吗?
  • 这很难说,因为我不知道 selenium 框架是如何发送密钥的,如果你调试没有看到文本光标的测试。
  • 我认为我们可以尝试以纯格式发送日期 - 11022100。大多数日期字段会自动更正输入。请记住,当我们手动输入它时,我们通常不会输入“。”值之间。

标签: c# selenium xpath css-selectors webdriverwait


【解决方案1】:

这是问题的解决方案:

               IWebElement wb = driver.FindElement(By.CssSelector("input.wideUserInput[id$='_BaseRightContent_MainRightContent_FromTextBox'][name$='FromTextBox']"));
                IJavaScriptExecutor jse = (IJavaScriptExecutor)driver;
                jse.ExecuteScript($"arguments[0].value='{employmentParam.StartDate}';", wb);

【讨论】:

  • 您使用的 CssSelector 不是从我的回答中复制的吗:)
【解决方案2】:

所需的元素是动态元素,因此您必须为所需的ElementToBeClickable() 诱导 WebDriverWait,您可以使用以下任一Locator Strategies 作为解决方案:

  • CssSelector:

    var element = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input.wideUserInput[id$='_BaseRightContent_MainRightContent_FromTextBox'][name$='FromTextBox']"))).Click();
    element.Click();
    element.Clear();
    element.SendKeys(employmentParam.StartDate);
    
  • XPath:

    var element = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@class='wideUserInput' and contains(@id, '_BaseRightContent_MainRightContent_FromTextBox')][contains(@name, 'FromTextBox')]"))).Click();
    element.Click();
    element.Clear();
    element.SendKeys(employmentParam.StartDate);
    

【讨论】:

  • 感谢您的回答。我的 selenium 类没有方法“ElementToBeClickable”(ExpectedConditions 不包含 ElementToBeClickable 的定义)-> 到旧的 selenium 版本?由于其他测试的未知更改而不想升级
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2017-05-24
  • 2018-09-05
  • 1970-01-01
  • 2022-06-16
  • 2022-11-10
相关资源
最近更新 更多