Как найти элемент с определенным текстом в <span>с помощью Selenium - PullRequest
0 голосов
/ 01 июня 2018

Я использую Selenium WebDriver.У меня проблема с динамически меняющимся идентификатором.Я просматривал некоторые посты, такие как Обработка элементов, которые постоянно меняют идентификаторы через Selenium Webdriver , но не нашел решения, которое могло бы мне помочь.

Включение start-with и contains в XPath не может помочь, так как есть много элементов, которые начинаются с одинакового текста, и идентификатор постоянно меняется.Пожалуйста, обратитесь к HTML ниже для большей ясности.

<mat-option _ngcontent-c1="" class="__mat-option mat-option ng-star-inserted" 
     role="option" tabindex="0" id="mat-option-4" 
     aria-selected="false" aria-disabled="false">
   <span class="mat-option-text">
        <i _ngcontent-c1="" class="material-icons">description</i>
        <span _ngcontent-c1="" style="padding-left: 8px">Campaign Details</span>
   </span>
  <div class="mat-option-ripple mat-ripple" mat-ripple=""></div>
</mat-option>
  • Обратите внимание на идентификатор в приведенном выше HTML, который является динамическим и постоянно меняется.
  • Есть еще несколько подобных элементовс таким же именем класса.
  • Есть еще несколько элементов, которые начинаются с mat-option-.
  • Единственный уникальный текст - это <span>.

Я пытался driver.findElement(By.xpath(".//span[contains(text(), 'Campaign Details']"));, но у меня не работает.

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

В соответствии с HTML, который вы указали для идентификации элемента с текстом как Сведения о кампании , так как элемент является Угловым элементом, вы должны вызвать WebDriverWait для элемент должен быть видимым следующим образом:

WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//mat-option[@class='__mat-option mat-option ng-star-inserted' and @role='option'][starts-with(@id,'mat-option-')]/span[@class='mat-option-text']//span[contains(.,'Campaign Details')]")));
0 голосов
/ 06 июля 2018
WebElement campaignDeatils =  driver.findElement(By.xpath(""//i[@class='fa fa-bullhorn']/following-sibling::span[text()='Campaigns']"))  

campaignDeatils.getText();
0 голосов
/ 01 июня 2018

Единственный уникальный это текст в <span> Таким образом, текст: Детали кампании

WebElement campaignDeatils =  driver.findElement(By.xpath("//i[text()='description']/following-sibling::span[text()='Campaign Details']"))  
campaignDeatils.getText(); // or any other operation you wanna do.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...