【问题标题】:How to send numerical values to an input tag using Selenium C#如何使用 Selenium C# 将数值发送到输入标签
【发布时间】:2019-03-28 06:43:42
【问题描述】:

我知道这可能是一个重复的问题,但我尝试了各种方法来解决这个问题,但无法解决问题

从网站复制的 HTML 代码

<input name="ctl00$TabContainer1$tpMain$ContentPlaceHolder1$Ins$txtDob" type="text" value="(dd/mm/yyyy)" maxlength="10" id="ctl00_TabContainer1_tpMain_ContentPlaceHolder1_Ins_txtDob" onselect="javascript:if(this.value=='(dd/mm/yyyy)') this.value='';this.style.color='';" onblur="javascript:InputValidation(this,'Date','Date of Birth','(dd/mm/yyyy)');" onclick="javascript:if(this.value=='(dd/mm/yyyy)') this.value='';this.style.color='';" onkeydown="return autodate(this)" onchange="javascript:CheckChanges();" onkeypress="return onlyNumbersWithForwardslash();" style="width:90%;" tabindex="0">

我的代码是这样的

string dob = startDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
string[] array = dob.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
char[] Chararray = string.Join(string.Empty, array).ToCharArray();

IWebElement DobElement = driver.FindElement(By.XPath("//*[@id='ctl00_TabContainer1_tpMain_ContentPlaceHolder1_Ins_txtDob']")); // .Id("ctl00_TabContainer1_tpMain_ContentPlaceHolder1_Ins_txtDob"));
    DobElement.Clear();

    foreach (char s in Chararray)
    {
         int num = Int32.Parse(s.ToString());
         DobElement.SendKeys(""+num);
    }

感谢任何人帮助在文本框中输入数字

【问题讨论】:

  • 您的问题是什么? 有人帮忙做什么?你被困在哪里了?错误堆栈跟踪?
  • @DebanjanB 没有错误抛出数字没有被输入到文本框中
  • 您需要使用基于文本的 HTML 而不是图片来更新问题。
  • @DebanjanB 也在这里复制了 html 代码

标签: c# selenium xpath css-selectors webdriverwait


【解决方案1】:

由于所需元素是启用了JavaScript 的元素,您需要诱导WebDriverWait 以使所需的元素可点击,您可以使用以下任一解决方案:

  • CssSelector

    IWebElement DobElement = driver.FindElement(By.CssSelector("input[id$='_Ins_txtDob'][name$='txtDob'][onblur*='InputValidation')]"));
    DobElement.Click();
    DobElement.Clear();
    
  • XPath

    IWebElement DobElement = driver.FindElement(By.XPath("//input[contains(@id, '_Ins_txtDob') and contains(@name, 'txtDob')][contains(@onblur, 'InputValidation')]"));
    DobElement.Click();
    DobElement.Clear();
    

【讨论】:

  • @DebenjanB 你能解释一下为什么要包含 onBlur 但不包含其他事件(如 keypress、keydown)的代码
  • 正如您所指出的,实际上我们可以考虑onkeydownonkeypress,就像onblur 一样。但是,如果您观察到 onkeydown 事件,它是非常通用的,并且可以出现在大多数 &lt;input&gt; 元素中。 onkeypress 也是如此。这两种选择都应该有效。我选择onblur,因为这个 event 将是三个要触发的事件中的最后一个事件,这可能是要在 中呈现的最后一个 event HTML.
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2017-12-23
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多