debug_backtrace()
детали предоставлений параметров, функции/вызовов метода в текущем стеке вызовов.
Мне приходилось перечитывать ваш вопрос пару раз, но я думаю, что понимаю его. Что вас интересует, так это предикаты. Предикаты позволяют вам выбирать узлы на основе условий.
Например, вы могли бы сделать:
//a[text()='second dropdown menu']/following::ul[1]/li/a[text()='link i want to find']
это выберет любую привязку с определенным текстом внутри, найдет следующую ul, а затем перейдет к ее дочерним элементам.
Также вы можно указать позиционный индекс в наборе результатов, следующий XPath является демонстрацией (но он не решит вашу проблему):
//a[text()='first dropdown menu']/ul/li[last()]/a/text()
или вы можете использовать оси для навигации между братьями и сестрами / предками / дочерними элементами:
//a[ancestor::ul/preceding::a[1]/text() = 'second dropdown menu']/text()
Итак, я не уверен, что правильно понял ваш вопрос, но это должно помочь вам написать XPath.
В принципе, я предполагаю, что ваш XPath соответствует привязке в нескольких списках, и вы хотите убедиться, что выбрали правильный.
, просто чтобы я правильно понял: вам нужна "какая-то ссылка "узел после" второго раскрывающегося меню "
ul[preceding::a[text()='second dropdown menu' and position()=last()]]/li/a[text()='link i want to find']
, это должно помочь (я не уверен на 100%, что вам нужно будет проверять position () = 1, но я думаю, что если вы его опустите, оно будет соответствовать все следующие ul, так как предыдущее - "все"
Поправьте меня, если я ошибаюсь - вам нужно выбрать «второе выпадающее меню» из примера выше, но текст может дублироваться, поэтому вам нужен только второй. XPath:
//a[text()='second drop down menu'][2]