Ayez le code HTML comme ci-dessous.et je veux localiser l'élément en utilisant le texte SOFTWATE.
<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>
J'ai essayé avec le xpath // div [@ class = 'filter- item-wrapper activate '] // label [contient (text (),' SOFTWARE ')]
, mais pas de chance.
N'importe qui pourrait s'il vous plaît aider à trouver l'élément à l'aide du texte ' LOGICIEL
'
4 Réponses :
essayez avec ce qui suit, cela peut fonctionner.
//div[@class='filter-item-wrapper activate']//label[contains(.,'SOFTWARE')]
Merci, cela a fonctionné. Pourriez-vous s'il vous plaît expliquer à quoi sert "." dans [contient (., 'SOFTWARE')] et aussi la signification de normalize-space (.) dans xpath
Vous ne voulez tout simplement pas localiser l'élément mais vous voulez cliquer ()
sur la case à cocher également et réaliser que vous devez induire WebDriverWait pour que l'élément soit cliquable et vous pouvez utiliser ce qui suit Stratégie de localisation :
Utilisation de CSS_SELECTOR
:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Utilisation de 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()
Remarque : Vous devez ajouter les importations suivantes:
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()
Vous pouvez essayer:
//div/descendant-or-self::label[normalize-space(.)='SOFTWARE']
Cela devrait supprimer tout espace blanc de début ou de fin supplémentaire avant d'essayer de faire correspondre le texte.
C'est précisément pourquoi nous conseillons toujours aux gens d'éviter d'utiliser text ()
pour accéder directement aux nœuds de texte. Il est presque toujours préférable d'utiliser string ()
pour accéder à la valeur de chaîne de l'élément contenant, et l'une des grandes différences est que le résultat de string ()
n'est pas affecté par ajouter ou supprimer des commentaires.
Utilisez donc contains (string (), 'SOFTWARE')
- qui peut ensuite être abrégé en contains (., 'SOFTWARE')
, car un appel string ()
est implicite lorsqu'une chaîne est requise et que vous fournissez un nœud.