Как отправить числовые значения во входной тег с помощью Selenium C#

#c# #selenium #xpath #css-selectors #webdriverwait

#c# #selenium #xpath #css-селекторы #webdriverwait

Вопрос:

Я знаю, что это может быть повторяющийся вопрос, но я пробовал различные методы для решения этого, но не смог решить ситуацию

введите описание изображения здесь
введите описание изображения здесь

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);
    }
  

приветствуется любая помощь по вводу числовых значений в текстовое поле

Комментарии:

1. В чем здесь ваш вопрос? кто-нибудь помогает в чем? Где вы застряли? Ошибка трассировки стека?

2. @DebanjanB нет ошибки, при которой числа не вводятся в текстовое поле

3. Вам нужно обновить вопрос с помощью текстового HTML вместо изображения.

4. @DebanjanB скопировал HTML-код также сюда

Ответ №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();
      

Комментарии:

1. @DebenjanB не могли бы вы объяснить код, почему следует включить onBlur, но не включать другие события, такие как нажатие клавиши, keydown

2. Как вы указали, фактически мы могли бы рассмотреть onkeydown или onkeypress просто как onblur . Но если вы наблюдаете за onkeydown событием, оно довольно общее и может присутствовать для большинства <input> элементов. То же самое касается onkeypress . Обе альтернативы должны работать. Я выбираю выбрать, onblur поскольку это событие будет последним из трех запускаемых событий, которое может быть последним событием , отображаемым в HTML .