Linda
(Natalie Linda)
05.Октябрь.2017 15:10:02
#1
Добрый день
Есть несколько элементов, и мне нужно проверить что в одном из них есть нужный мне текст.
Подскажите пжлст как это можно сделать?
Использую Java + Selenide
думала можно как-то через $$ (cssSelector) но не нашла как это сделать…
Подскажите, пжлст.
baxatob
(Yury)
05.Октябрь.2017 15:16:16
#2
Опишите, какой конкретно элемент, а лучше выложите код страницы с этим элементом.
Linda
(Natalie Linda)
05.Октябрь.2017 15:37:17
#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> 139.00</span> – <span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span> 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> 19.89</span> – <span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span> 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>
и вот от сюла мне и нужен текст`Текст "как есть" (без применения форматирования)`
С помощью джавы 8 можно сделать так:
boolean hasText = $$(“ваш локтор”).stream().map(SelenideElement::getText).anyMatch(s -> s.contains(“текст”));
2 лайка
natalich
(Максим Наталич)
06.Октябрь.2017 01:57:57
#6
Что бы просто вытащить текст элемента используйте
$ (cssSelector).text();
Что бы проверить содержится ли нужный вам текст в элементе
$ (cssSelector).shouldHave(text(“Ваш_текст”));
3 лайка
Linda
(Natalie Linda)
06.Октябрь.2017 08:56:00
#7
а подскажите, пожалуйста, как можно сделать так, что б сам @Test фейлился, если boolean hasText = false?
Linda
(Natalie Linda)
06.Октябрь.2017 08:59:57
#8
О! нашла
assertFalse (String.valueOf(hasText), false);
Спасибо, огромное!!!
assertFalse (String.valueOf(hasText), false) - так не надо делать. Можно просто:
assertTrue(hasText);
asolntsev
(asolntsev)
06.Октябрь.2017 20:24:08
#11
@Linda @Ostap_Oleksyn @natalich
Есть вариант покороче и побыстрее:
$$("ваш локтор").filter(withText("текст")).should(exist);
vmaximv
(vmaximv)
06.Октябрь.2017 21:35:37
#12
чем он побыстрее? (ЗЫ: я то примерно понимаю)
Linda
(Natalie Linda)
11.Октябрь.2017 09:25:26
#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
Не подскажите, в чем может быть проблема?
Linda
(Natalie Linda)
11.Октябрь.2017 10:21:38
#14
Почемуто не могу так сделать
у меня пишет мол
should has protected access to com.codeborne.selenide.ElementsCollection
Может попробовать вот так:
$$(“ваш локтор”).filter(text(“текст”)).should(exist);
Linda
(Natalie Linda)
11.Октябрь.2017 11:24:33
#17
аналогичная ошибка
в подсказках вообще нет просто should
есть shouldBe, shouldHave и тп
shouldBe()
should(be())
тоже не работает
Может вам как-то поможет, это пример рабочего кода:
public static SelenideElement FindingDocumentByNumber(String docNumber) {
return $$(byClassName("case-list")).find(visible).$(By.tagName("table")).$$(By.tagName("tr")).find(text(docNumber));
}
Здесь выполняется поиск одного из элементов в таблице. У вас список, но суть от этого не меняется.
Linda
(Natalie Linda)
11.Октябрь.2017 13:16:36
#19
$$ ("локатор").findBy(text(text)).shouldBe(visible);
Сработало) Спасибо)
1 лайк