Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как достать текст из одного из элементов?

java
webdriver
selenium
Теги: #<Tag:0x00007fedbaf5d570> #<Tag:0x00007fedbaf5d020> #<Tag:0x00007fedbaf5ce40>

(Natalie Linda) #1

Добрый день
Есть несколько элементов, и мне нужно проверить что в одном из них есть нужный мне текст.
Подскажите пжлст как это можно сделать?

Использую Java + Selenide
думала можно как-то через $$ (cssSelector) но не нашла как это сделать…

Подскажите, пжлст.


(Yury) #2

Опишите, какой конкретно элемент, а лучше выложите код страницы с этим элементом.


(Natalie Linda) #4
<ul class="products clearfix products-4">

   <li class="post-618 product type-product status-publish has-post-thumbnail product_cat-flash-drives product_tag-
   encrypted-flash-drive product_shipping_class-a first instock taxable shipping-taxable purchasable product-type-
   variable has-children">
      <a href="https://www.site.com/product/encrypted-flash-drive" class="product-images" aria-label="SecureUSB 
       3.0 Encrypted Flash Drive">
             <div class="crossfade-images" style="height: 246px;">
               <img width="500" height="500" src="https://www.site.com/wp-content/uploads/2016/04/secureUSB-
                packaging-front-500x500.png" class="hove...........">
 

         <div class="cart-loading"><i class="fusion-icon-spinner"></i></div>
      </div>
           </a>
    <div class="product-details">
   <div class="product-details-container">
   <h3 class="product-title" data-fontsize="28" data-lineheight="30">
   <a href="https://www.site.com/product/encrypted-flash-drive">
SecureUSB 3.0 Encrypted Flash Drive	</a>
</h3>
<div class="fusion-price-rating">
<span class="price"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>&nbsp;139.00</span> – <span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>&nbsp;199.00</span></span>
</div>
<div class="fusion-content-sep"></div>
</div>
</div>
<div class="product-buttons">
<div class="product-buttons-container clearfix">
<a rel="nofollow" href="https://www.site.com/product/encrypted-flash-drive" data-quantity="1" data-product_id="618" data-product_sku="SD-USB3 (16GB / 32GB / 64GB)" class="button product_type_variable add_to_cart_button">Select options</a><a href="https://www.site.com/product/encrypted-flash-drive" class="show_details_button">
Details</a>
</div>
</div>
</li>
<li class="post-672 product type-product status-publish has-post-thumbnail product_cat-software product_tag-anti-virus product_tag-cloud-backup  instock purchasable product-type-variable has-children">
<a href="https://www.site.com/product/securebackup-for-usb-drive" class="product-images" aria-label="SecureBackup for USB Drive Software">
<div class="crossfade-images" style="height: 246px;">
<img width="500" height="500" src=..........">

 <div class="cart-loading"><i class="fusion-icon-spinner"></i></div>
</div>
</a>
<div class="product-details">
<div class="product-details-container">
<h3 class="product-title" data-fontsize="28" data-lineheight="30">
<a href="https://www.site.com/product/securebackup-for-usb-drive">
SecureBackup for USB Drive Software	</a>
</h3>
<div class="fusion-price-rating">
<span class="price"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>&nbsp;19.89</span> – <span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>&nbsp;39.78</span></span>
</div>
<div class="fusion-content-sep"></div>
</div>
</div>
<div class="product-buttons">
<div class="product-buttons-container clearfix">
<a rel="nofollow" href="https://www.site.com/product/securebackup-for-usb-drive" data-quantity="1" data-product_id="672" data-product_sku="SD-CS001" class="button product_type_variable add_to_cart_button">Select options</a><a href="https://www.site.com/product/securebackup-for-usb-drive" class="show_details_button">
Details</a>
</div>
</div>
</li>
</ul>


не знаю как тут красивее сделать :frowning:
 есть класс products clearfix products-4
и в нем  несколько тегов <li>
в которых есть теги теги теги
и в итоге есть

 <a href="https://www.site.com/product/encrypted-flash-drive">
SecureUSB 3.0 Encrypted Flash Drive	</a>

и вот от сюла мне и нужен текст`Текст "как есть" (без применения форматирования)`

(Остап Олексин) #5

С помощью джавы 8 можно сделать так:
boolean hasText = $$(“ваш локтор”).stream().map(SelenideElement::getText).anyMatch(s -> s.contains(“текст”));


(Максим Наталич) #6

Что бы просто вытащить текст элемента используйте
$ (cssSelector).text();
Что бы проверить содержится ли нужный вам текст в элементе
$ (cssSelector).shouldHave(text(“Ваш_текст”));


(Natalie Linda) #7

а подскажите, пожалуйста, как можно сделать так, что б сам @Test фейлился, если boolean hasText = false?


(Natalie Linda) #8

О! нашла
assertFalse (String.valueOf(hasText), false);

Спасибо, огромное!!!


(Остап Олексин) #9

assertFalse (String.valueOf(hasText), false) - так не надо делать. Можно просто:
assertTrue(hasText);


(Natalie Linda) #10

cпасибо :slight_smile:


(asolntsev) #11

@Linda @Ostap_Oleksyn @natalich
Есть вариант покороче и побыстрее:
$$("ваш локтор").filter(withText("текст")).should(exist);


(vmaximv) #12

чем он побыстрее? (ЗЫ: я то примерно понимаю)


(Natalie Linda) #13

У меня почему-то такая ошибка

method references are not supported in -source 1.6
[ERROR] (use -source 8 or higher to enable method references)

lambda expressions are not supported in -source 1.6
[ERROR] (use -source 8 or higher to enable lambda expressions)

локально все хорошо, но почему-то на сервере идут эти ошибки…
там винда 10, локально 7

Не подскажите, в чем может быть проблема?


(Natalie Linda) #14

Почемуто не могу так сделать
у меня пишет мол

should has protected access to com.codeborne.selenide.ElementsCollection


(Сергей Горелов) #15

Может попробовать вот так:
$$(“ваш локтор”).filter(text(“текст”)).should(exist);


(Natalie Linda) #17

аналогичная ошибка
в подсказках вообще нет просто should
есть shouldBe, shouldHave и тп
shouldBe()
should(be())
тоже не работает


(Сергей Горелов) #18

Может вам как-то поможет, это пример рабочего кода:

public static SelenideElement FindingDocumentByNumber(String docNumber) {
	return $$(byClassName("case-list")).find(visible).$(By.tagName("table")).$$(By.tagName("tr")).find(text(docNumber));
}

Здесь выполняется поиск одного из элементов в таблице. У вас список, но суть от этого не меняется.


(Natalie Linda) #19

$$ ("локатор").findBy(text(text)).shouldBe(visible);

Сработало) Спасибо)