При тестировании веб репортов с использованием webDriver'a столкнулась с необычной на первый взгляд проблемой. Каждый web-репорт содержит внутри себя целую иерархию фреймов, соответственно, чтобы добраться до нужного элемента репорта (например диаграммы), необходимо подключиться к нужному фрейму. С этим проблем не возникло, фреймы прекрасно находятся как по именам и идентификаторам, так и по xpath (если имена и идентификаоры изменяются при рефреше страницы соответственно). Однако, почему-то поиск элементов внутри конкретного фрейма по xpath (кроме другого фрейма!) всегда заканчивается неудачей, при том что поиск того же элемента по id/name/tagName проходит удачно. У меня есть подозрение, что я как-то неверно указываю путь до элемента относительно корня документа (контекста?). Но почему тогда фреймы находятся с тем же подходом к написанию xpath?
Пример структуры документа и кода для поиска элемента:
<html> <body> <div> ...... <iframe id="уникальный"> #document <html> .... <iframe id="неуникальный" title="Название"> #document <html> <body> <div> ..... <div id="уникальный"> <div> - тут много элементов без уникальных id и в них уже искомый элемент <rect id="неуникальный" >
пытаюсь найти rect (их может быть много, поэтому пусть будет хотя бы список)
driver.switchTo().frame(id); WebElement fr = driver.findElement(By.xpath("//iframe[@title='Название']")); driver.switchTo().frame(fr); List<WebElement> els = driver.findElements(By.xpath("//rect"));
В итоге тест падает по таймауту (хотя он довольно большой выставлен) и говорит, что искомый элемент не найден. Если заменить поиск по xpath на, например,
List<WebElement> els = driver.findElements(By.tagName("rect"));
то все ищется. В чем загвоздка? ) Просто в конечном итоге нужно найти конкретный элемент rect и я пока не вижу другого способа, кроме как через xpath его уникально определить, а тут такая засада...
Заранее спасибо!