Селен XPATH предшествующий брат не работает - PullRequest
0 голосов
/ 16 мая 2018
<div class=”ag-cell-label-container ag-header-cell-sorted-none” role=”presentation”
  <span ref=”eMENU” class=”ag-header-icon ag-header-cell-menu-button” aria-hidden=”true” style=”transition:opacity 0.2s;>
    <span class=”ag-icon ag-icon-menu”></span>
  </span>
  <div ref=”eLabel” class=”ag-header-cell-label” role=”presentation”>
    <span ref=”eText” class=”ag-header-cell-text role=”columnheader”> Product</span>

Мне нужно нажать на ag-icon ag-icon menu в моем приложении для столбца Продукт. Я написал ниже xpath, чтобы сделать то же самое. Но существует более 1 элемента, соответствующего xpath, указанному в одноуровневом элементе, и поэтому я жестко закодировал вхождение как [1]. Есть ли способ получить клик по ag-icon ag-icon menu без использования ссылки?

WebElement pipeline = driver.findElement(By.xpath("//span[text()='Product']"));
WebElement parent = pipeline.findElement(By.xpath(".."));
WebElement sibling = parent.findElement(By.xpath("(//preceding-sibling::span[@class='g-header-icon ag-header-cell-menu-button']/span)[1]"));
sibling.click();

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Пожалуйста, попробуйте следующий xpath, и он будет работать

driver.findElement(By.xpath("//span[contains(@class,'ag-icon') and contains(@class,'ag-icon-menu')]")).click();

Когда атрибут класса имеет несколько уникальных значений, тогда мы можем использовать условие «И»

0 голосов
/ 16 мая 2018
// Option 1
String xpath = "//div[div/span[@role='columnheader' and text()='Product']" + 
"//span[contains(@class, 'ag-icon-menu')]"

driver.findElement(By.xpath(xpath)).click();


// Option 2
String xpath = "//div[div/span[@role='columnheader' and text()='Product']"
driver.findElement(By.xpath(xpath))
      .findElement(By.cssSelector("span.ag-icon-menu"))
      .click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...