xpath для двух атрибутов - PullRequest
       1

xpath для двух атрибутов

0 голосов
/ 29 августа 2018

У меня проблемы с синтаксисом xpath для двух атрибутов на одном элементе.

Вот мой код:

WebElement dlFileBtn = driver.findElement(
   By.xpath("//*[contains(@href='/file/download/id/" + downloadID + "')]" 
          + "/@*[title()='Download file']"));

Вот HTML-код для элемента:

<a title="Download file" alt="Right-click to download. (Hold-click Mac.)" 
   target="dlfile" data-isimage="false" class="download" 
   href="/file/download/id/1169">Download file</a>

Поскольку есть две кнопки с одним и тем же href, мне нужно запросить их по идентификатору и названию. Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Ошибка первого предиката с функцией contains().

  • contains() принимает два параметра. Первый параметр - это значение для тестирования, а второй - значение для поиска. Это должно быть [contains(@href,'/file/download/id/" + downloadID + "')]
  • или вы можете просто проверить все значение с помощью [@href='/file/download/id/" + downloadID + "']

В последней части вашего XPath есть пара проблем: /@*[title()='Download file']

  • /@* вместо применения другого фильтра предикатов к сопоставленному элементу, вы выбираете все атрибуты сопоставленных элементов, а затем
  • [title()='Download file'] - это фильтр предикатов, который пытается выбрать только те атрибуты, которые имеют title(), равный «Загрузить файл»
  • Однако, нет title() селектора узла или функции для фильтрации этих атрибутов

Вы можете использовать несколько предикатов и настроить эту последнюю часть XPath так:

//*[@href='/file/download/id/" + downloadID + "'][@title='Download file']

Вы можете объединить эти фильтры предикатов и протестировать несколько выражений в одном и том же предикате с помощью операторов and и or.

//*[@href='/file/download/id/" + downloadID + "' and @title='Download file']
0 голосов
/ 29 августа 2018

На указанном вами элементе нет идентификатора,

Вы можете найти элемент по:

//a[@title='Download file' and @href='/file/download/id/1169']

Цель тега.

0 голосов
/ 29 августа 2018

Можете ли вы проверить, работают ли перечисленные ниже варианты с cssSelector или xpath, просто попробуйте;

WebElement ele1 = driver.findElement(By.cssSelector("a[id='Id goes here'][title='Download file']"));
WebElement ele1 = driver.findElement(By.xpath("//a[@id='Id goes here'][@title='Download file']"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...