#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 .