Как найти поле ввода с помощью C # Selenium - PullRequest
1 голос
/ 05 июня 2019

Мне нужно найти поле ввода в этом HTML:

<div id="employeesDataTable_filter" class="dataTables_filter">
<label>
<input type="search" class="form-control input-sm"
placeholder="Filter..." aria-controls="employeesDataTable">
</label>
</div>

Но для меня жизнь не может - пожалуйста, помогите,

Я успешно написал пакеты с тестами и нашел множество элементов страницы разных типов, но этот поставил меня в тупик.

Я очень новичок в этом и попробовал

By ExecutiveSearchBox = By.XPath("//input[@type='search' and 
    class='dataTables_filter']");

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

Вы столкнулись с проблемами, потому что вы выбираете атрибут class в узле input вместо div.Попробуйте следующий селектор:

//div[@class='dataTables_filter']//input[@type='search']

Также, как упомянул @Marco Forberg, полезно использовать функцию contain() XPath в случае, если для элемента предусмотрено несколько классов:

//div[contains(@class, 'dataTables_filter')]//input[@type='search']

Iнадеюсь, это поможет решить вашу проблему:)

0 голосов
/ 11 июня 2019

Чтобы найти элемент ввода в вашем html-фрагменте, просто используйте

FindElement( By.CssSelector( "input" ) )

Но обратите внимание:

  • неПоле ввода всегда доступно для редактирования после завершения загрузки страницы, это может занять некоторое время.Возможно, было бы целесообразно подождать, пока окно не станет редактируемым, если вы хотите отправить на него данные.
  • не всегда поле ввода появляется сразу в DOM.В современном пользовательском интерфейсе, таком как Angular, он может появиться не сразу, может быть какое-то время какое-то время и только позже стать полем ввода и тому подобное.Также здесь, использование функциональности ожидания Seleniums - хорошая идея.

Я ВСЕГДА жду ожидаемого состояния DOM и только через некоторое время, когда состояние не достигается, я выбрасываю.

0 голосов
/ 05 июня 2019

Чтобы найти и отправить последовательность символов в нужном элементе, у вас есть WebDriverWait для требуемого ElementToBeClickable , и вы можете использовать любой из следующих Стратегии локатора как решения:

  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input.form-control.input-sm[aria-controls='employeesDataTable']"))).SendKeys("John Hyslop");
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@class='form-control input-sm' and @aria-controls='employeesDataTable']"))).SendKeys("John Hyslop");
    
...