Попытка получить доступ к Родителю и затем элементу родного брата в селене. Не выдает исключение элемента - PullRequest
0 голосов
/ 17 апреля 2020

Структура элемента

//table[@class='table-table-condensed']//tbody//tr...
  <td class="ng-binding">TEXT1</td>
  <td class="ng-binding">2020-04-17 18:55:58.022</td>
  <td>
    <span class="label label-default">Not Started</span>
  </td>
  <td>
    <div class="pull-right">
      <button class="btn-success"/>
      <button class="run"/>
      <button class="review"/>
    </div>
  </td>

Попытка получить доступ к элементу кнопки:

Если текст соответствует этому элементу:

WebElement we = driver.findElement.By(xpath("//table[@class='table-table-condensed']//tbody//tr//td[@class='ng-binding'][1]");
String str = we.text();
if(str.equals("TEXT1"))
{
    WebElement ex = we.findElement(By.xpath("./parent::following:://button[@class='run']"));

    ex.click();
}

, это исключение не найдет элемент, Пробовал following::sibling тоже. Можем ли мы использовать оба тега одновременно здесь. Как получить доступ к элементу кнопки.

Кроме того, тег following:: не будет работать, если бы мне пришлось получить доступ к тегам ниже в структуре:

<td class ="ng-binding">2020-04-17 18:55:58.022</td>   ( Need to extract this element to sort the list by Latest date)

AND

<span class ="label label-default">Not Started</span>  

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Попробуйте приведенное ниже решение

wait = WebDriverWait(driver, 10)    
elementText= wait.until(EC.element_to_be_clickable((By.XPATH, "//table[@class='table-table-condensed']//tbody//tr/following-sibling::td[contains(text(),'Test1')][contains(@id, "ng-binding")]")))
button=wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='run']")))
if(elementText.text=="Test1"): 
   button.click()
else:
   print "Not found!"
1 голос
/ 18 апреля 2020

Ваш ./parent::following:://button[@class='run'] недействителен XPath!

Правильная форма: axis::node[predicate]. Вам не разрешено связывать несколько осей вместе, и вы должны указать узел! Обратите внимание, что узел wilcard * все еще действителен.

Вероятно, вы ищете ./following-sibling::td//button[@class='run'] или, возможно, ./following::button[@class='run'].

1 голос
/ 17 апреля 2020

Другой подход, вы можете попытаться решить эту проблему, используя tr[contains(., 'TEXT VALUE')]:

String text = "TEXT1";
WebElement element1 = driver.findElement(By.xpath("//table[@class='table-table-condensed']//tr[contains(., '" +text +"')]//td[2]"));
WebElement element2 = driver.findElement(By.xpath("//table[@class='table-table-condensed']//tr[contains(., '" +text +"')]//span"));
WebElement element3 = driver.findElement(By.xpath("//table[@class='table-table-condensed']//tr[contains(., '" +text +"')]//button[@class='run']"));
System.out.println(element1.getText());
System.out.println(element2.getText());
element3.click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...