2015-11-05 3 views
0

Я пытаюсь автоматизировать свои тестовые примеры с использованием Selenium для приложения OBIEE. Теперь мне нужно прочитать значение из созданного табличного отчета. Проблема в том, что идентификатор последней ячейки, где суммарно, продолжает меняться. Например, в настоящее время идентификатор: db_saw_9270_6_1610_0. После обновления, идентификатор становится чем-то другим. 4 числа между (9270) меняются. Остальные бит совпадают. Я использую следующую логику, чтобы захватить этот элемент:XPath-Getting Element из таблицы с динамическим идентификатором

driver.findElement(By.xpath(".//*[contains(@id, '_6_1610_0')]")).getText(); 

Но, она возвращается org.openqa.selenium.NoSuchElementException: Не удается найти элемент:

Пожалуйста, скажите мне, где я ошибся и что мне делать?

+0

Вы можете попробовать? driver.findElement (By.xpath ("// * [содержит (@id, '_6_1610_0')]")). getText(); –

+0

Пробовал. Не работает. –

+0

Можете ли вы немного опустить свой html-код. – e1che

ответ

0

вы можете попробовать starts-with и substring (в качестве замены для XPath 2.0 methdod ends-with):

string xpath = "//*[starts-with(@id, 'db_saw_') and substring(@id, string-length(@id) - 8) = '_6_1610_0']" 

driver.findElement(By.xpath(xpath)).getText(); 
+0

Исключение в теме "main" org.openqa.selenium.InvalidSelectorException: данный селектор .//*[starts-with(@id, 'db_saw_') и 'substring (@id, длина строки (@id) - 8) = '_6_1610_0'] либо недействителен, либо не приводит к использованию WebElement. Произошла следующая ошибка: InvalidSelectorError: не удалось найти элемент с выражением xpath .//*[starts-with(@id, 'db_saw_') и 'substring (@id, string-length (@id) - 8) = '_6_1610_0'] из-за следующей ошибки: SyntaxError: выражение не является юридическим выражением. –

+0

не использовать "." перед "//" ! взгляните на мой код, его там нет! – drkthng

+0

Получение одинакового результата. :( Вызвать: org.openqa.selenium.InvalidSelectorException: данный селектор // * [начинается с (@id, 'db_saw_') и 'substring (@id, длина строки (@id) - 8) = '_6_1610_0'] либо недействителен, либо не приводит к появлению WebElement. Произошла следующая ошибка: InvalidSelectorError: не удалось найти элемент с выражением xpath // * [start-with (@id, 'db_saw_') и ' substring (@id, string-length (@id) - 8) = '_6_1610_0'] из-за следующей ошибки: SyntaxError: выражение не является юридическим выражением. –

0

Вы можете попробовать ниже XPath: -

driver.findElement(By.xpath("//*[starts-with(@id, 'db_saw')]")).getText(); 
+0

Нет. На самом деле существует множество элементов, начинающихся с «db_saw». –

+0

@Abhineet Kumar, Ok..so, если вам известно о позиции требуемого веб-элемента, тогда в этом случае вы можно упомянуть p номер osition, например // * [start-with (@id, 'db_saw')] [2], это означает, что вы хотите получить доступ к 2-му веб-элементу из набора веб-элементов, идентифицированных с помощью конкретного xpath. –

0
driver.findElement(By.CSSselector("a[id*='_6_1610_0']")).getText(); 

Замечание: при a представляет элемент html. Если ваш идентификатор находится в элементе, вы должны заменить a на таблицу.

Check this out for more examples with css selector

Смежные вопросы