2016-09-26 6 views
0

Я UI-тестирование веб-страницы с сеткой на ней, используя Selenium Webdriver в C#.Как прокрутить вниз раздел в Selenium (C#)?

В сетке есть своя полоса прокрутки, и я хотел бы прокрутить вниз до нижней части сетки, чтобы проверить, что определенный результат появился, когда я добавляю его через модальную форму (тест пользовательского интерфейса в настоящее время терпит неудачу, я вижу результат, пока не прокручу вниз).

Как настроить таргетинг на полосу прокрутки на сетке в отличие от обычной полосы прокрутки на главной веб-странице? Это HTML из полосы прокрутки моей сетки в:

<div class="ScrollbarLayout_face ScrollbarLayout_faceVertical public_Scrollbar_face" style="height: 367.38px; transform: translate3d(0px, 148.535px, 0px); backface-visibility: hidden;"></div> 

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

WebElement element = driver.findElement(By.id("my-id")); 
Actions actions = new Actions(driver); 
actions.moveToElement(element); 
actions.perform(); 
+0

Вы должны попробовать яваскрипта функцию [ 'Element.scrollIntoView()'] (https: //developer.mozilla.org/en/docs/Web/API/Element/scrollIntoView), чтобы достичь этого элементарного элемента как драйвера ((IJavaScriptExecutor)) .ExecuteScript ("arguments [0] .scrollIntoView()", driver.FindElement (By.id («my-id»))); ' –

+0

Это моя проблема - если бы я мог нацелить или найти элемент в первую очередь, мне не нужно было бы прокручивать вниз. Тест моего пользовательского интерфейса терпит неудачу, потому что элемент не может быть просмотрен, хотя он находится в нижней части сетки, просто скрылся из виду. – Marcus

+0

Если вы хотите прокручивать, когда это необходимо, вы можете проверить свойство 'element.Displayed', чтобы определить прокрутку или нет. –

ответ

1

Первый набор фокус на любой объект сетки, используя любое событие

driver.FindElement(By.XPath("/html/body/div[2]//table/tbody/tr[1]/td[1]")).Click(); 

Затем добавьте ниже две строки:

Actions actions = new Actions(driver); 
actions.SendKeys(OpenQA.Selenium.Keys.End).Build().Perform(); 
+0

Большое спасибо, этот ответ в основном сделал это для меня. То, что мне нужно было сделать, было нацелено на полосу прокрутки и нажимать на нее один раз, чтобы активировать ее. Затем я отправил команду «Страница вниз» с помощью действий (по какой-то причине End не работал), и это сработало. Приветствия! – Marcus

0

попытаться выполнить действие над этим элементом без прокрутки вниз до него. То есть, получите элемент findElement() и выполните свое действие на нем, не прокручивая страницу.

+0

Это изначально то, что я пытался сделать. Моя сетка имеет свойство, строки, в которых хранятся все строки и их информация. Итак, когда я добавляю новую строку, мой код получения (псевдо) выглядит так: MyGrid.Rows.First (row => row.Text == "Случайная строка") Когда я отлаживаю точки останова, я смотрю на Объект MyGrid.Rows и все строки находятся там. При ближайшем рассмотрении строки, которые не видны в сетке (то есть те, которые нужно прокрутить для видимости), отображаются в объекте MyGrid.Rows, но со всеми его значениями как пустые строки. – Marcus

+0

Кроме того, если я могу найти элемент в первую очередь, это означает, что мой тест пользовательского интерфейса пройдет! Мой тест пользовательского интерфейса проверяет строки в моей сетке для сопоставления элементов, например. MyGrid.Rows.First.Should(). Be («Случайная строка»); – Marcus

+0

попробуйте это Mouse.MoveScrollWheel (UITestControl, Int32), где «UITestControl» будет вашим управлением сеткой – nimesh

0

мне удалось решить эту благодаря помощи со стороны пользователя nikhilp:

a) Ориентация на полосу прокрутки XPath

Driver.FindElement(By.XPath("//*[@id=\"myGrid\"]/div/div/div[2]/div")) 

б) При нажатии на полосу прокрутки один раз, чтобы активировать его

.Click() 

с) Отправка команды Page Down

Actions actions = new Actions(Driver); 
actions.SendKeys(Keys.PageDown).Build().Perform(); 
Смежные вопросы