Невозможно найти элемент, используя текст, когдадоступен внутри этикетки - PullRequest
1 голос
/ 27 июня 2019

Используйте HTML-код, как показано ниже. И я хочу найти элемент, используя текст ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.

<label _ngcontent-c5="" class="form-check-label" style="" xpath="1">
  <input _ngcontent-c5="" class="form-check-input ng-untouched ng-pristine ng-valid" type="checkbox">
  <!----> 
  <!---->
  <span _ngcontent-c5="" class="checkmark">
  </span>
  SOFTWARE 
</label>

Попробовал с xpath //div[@class='filter-item-wrapper activate']//label[contains(text(),'SOFTWARE')], но не повезло.

Кто-нибудь может помочь найти элемент, используя текст 'SOFTWARE'

Ответы [ 4 ]

1 голос
/ 27 июня 2019

Именно поэтому мы всегда советуем людям избегать использования text() для прямого доступа к текстовым узлам. Почти всегда лучше использовать string() для доступа к строковому значению содержащего элемента, и одно из больших отличий заключается в том, что на результат string() не влияют добавление или удаление комментариев.

Так что используйте contains(string(), 'SOFTWARE') - который затем можно сократить до contains(., 'SOFTWARE'), потому что вызов string() является неявным, когда требуется строка и вы предоставляете узел.

1 голос
/ 27 июня 2019

попробуйте следующее, оно может работать.

//div[@class='filter-item-wrapper activate']//label[contains(.,'SOFTWARE')]
0 голосов
/ 27 июня 2019

Вы можете попробовать:

//div/descendant-or-self::label[normalize-space(.)='SOFTWARE']

Это должно убрать любые дополнительные начальные или конечные пробелы, прежде чем пытаться сопоставить текст.

0 голосов
/ 27 июня 2019

Предположительно, вы просто не хотите найти элемент , но вы также хотите click() на флажке и для достижения этого вам нужно вызвать WebDriverWait для элемента , который можно нажимать , и вы можете использовать следующую Стратегию локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.form-check-label>input.form-check-input.ng-untouched.ng-pristine.ng-valid[type='checkbox']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='form-check-label' and normalize-space()='SOFTWARE']/input[@class='form-check-input ng-untouched ng-pristine ng-valid']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...