Как обрабатывать перекрывающиеся страницы в selenium webdriver с помощью java

введите описание изображения здесьПривет, у меня есть пользовательский интерфейс на основе extJS. У меня проблемы с перекрывающимися страницами. Например: у меня есть страница с кнопкой, которая открывает панель (Примечание: это не отдельный кадр и не отдельное окно. Он открывается внутри того же DOM, что и на родительских страницах DOM). Панель перекрывает основную страницу. панель имеет z-индекс в атрибуте стиля. Теперь я хочу определить элементы управления на этих панелях. как я могу сделать это в веб-драйвере селена. Также есть вероятность, что панель и базовая страница могут иметь одни и те же элементы управления (но базовые элементы управления не активны). так как мы можем идентифицировать такие элементы управления? ТИА. Привет, я хочу добавить снимок экрана пользовательского интерфейса, но я не могу добавить, так как он говорит, что мне нужно как минимум 10 репутации для публикации изображений. как получить 10 репутации? Также есть некоторые элементы управления, которые появляются на обеих страницах, то есть на перекрывающейся и перекрывающейся странице. И поскольку его пользовательский интерфейс основан на extJS, идентификаторы генерируются автоматически, CSSLocator идентифицирует оба элемента управления, которые отображаются в пользовательском интерфейсе и похожи. Так что, я думаю, у меня остался только один вариант: каким-то образом зайти в панель, а затем идентифицировать элемент управления. Я попытался использовать driver.switchTo.activeElement, предполагая, что базовый элемент управления неактивен, но он мне все равно не помогает. Любая помощь в этом отношении. ТИА

Прикрепил Скриншот. Теперь, как вы можете видеть, у меня есть выделенная панель, перекрывающая основную страницу, и она также присутствует в DOM перекрывающейся страницы. Некоторые указатели: 1) Я пробовал с XPath, но это не поможет, так как мне придется жестко кодировать xpath для каждого такого элемента управления в пользовательском интерфейсе (я пытаюсь динамически генерировать xpath, но это все еще продолжается.) 2) Есть ли в любом случае что мы можем сказать драйверу выбрать элемент управления, который имеет фокус и является активным. Исходный DOM слишком велик для вставки. Проблемным элементом управления является кнопка «Начать запрос», как показано на снимке экрана, которая присутствует дважды и может появляться на странице несколько раз. Я работаю над предложенными вами решениями.


person Mrunal Gosar    schedule 22.04.2013    source источник
comment
Вы можете поделиться html-кодом своей страницы или ссылкой на веб-страницу, чтобы мы могли вам помочь?   -  person Hemanth    schedule 22.04.2013
comment
В этом случае вы можете использовать xpath. Попробуйте добавить скриншот своей веб-страницы сейчас.   -  person Hemanth    schedule 23.04.2013


Ответы (1)


Поскольку на скриншоте показано всего несколько строк DOM, я могу только предположить, что у вас есть.

Я предполагаю, что у вас есть DOM, подобный этому:

<button id='ext-gen343'>Start query</button>
<div id="ext-gen1829" class=" x-window" style="width: 30px; height: 85px; margin: 0px; left: 0px; top: 0px; visibility: visible; display: block;">
    <button id='ext-gen1920'>Start query</button>
</div>

Сначала найдите окно, а затем просто найдите кнопку внутри с помощью cssSelector или Xpath.

// Note that I used 'display: block;' to ensure we are looking for the active/visible window.
WebElement btnStartQueryInside = driver.findElement(By.XPath("//div[contains(@class, 'x-window') and contains(@style, 'display: block;')]//button[text()='Start query']"));

Что касается вашего пункта № 2, вам нужен driver.switchTo.activeElement, о котором вы упоминали ранее. Но это не элегантное решение для этого, или даже не будет работать вообще.

person Yi Zeng    schedule 22.04.2013