Как проверить, есть ли зачеркнутый текст в селеновом вебдрайвере?
Есть много планшетов, которые имеют один и тот же класс и идентификаторы, внутри них есть ряд <p>
теги и оформленный текст.
<div class="planbox">
<p class="baseprice">
<span>
<strike> $70 </strike>
</span>
</p>
<p> New discount price is etc. </p>
</div>
<div class="planbox">
<p class="baseprice">
<span> $70 </span>
</p>
</div>
Теперь мой тестовый пример - если базовая цена зачеркнута, только тогда <p> 'New discount price .. </p>
покажет, иначе нет.
Как проверить, зачеркнут ли текст или нет? И даже если мы получим это, как я проверю это <p> New discount.. </p>
не должен показываться, если текст не зачеркнут.
Как нет класса в <p>
тег, по которому я могу проверить, отображается ли он или нет.
На мой взгляд, одним из решений было - добавить один фиктивный класс в <span>
тег и использование findChildren('span.dummyCLass')
это приведет ко всем webelements, имеющим dummyClass.
Сейчас я проверю, есть ли у веб-элементов метка забастовки или нет, и это то место, где я застрял.
Вначале я думал о решении Jquery, но возможно ли обойтись без добавления нового класса и jquery?
3 ответа
Вам не нужно добавлять класс к любому элементу, чтобы выполнить эту задачу. В общем, вы не хотите редактировать HTML. Другая проблема заключается в том, что... если вы можете найти элемент для добавления класса, вам не нужно добавлять класс, чтобы найти элемент.:)
Способ, которым я подхожу к таким задачам, состоит в том, чтобы найти самый внешний элемент, который содержит все элементы, которые вас интересуют. Я называю это "контейнером". В этом случае вы хотите найти контейнеры и пройтись по ним в поисках цены зачеркивания и текста "Новая цена со скидкой...".
Контейнеры DIV
с planbox
учебный класс. Зачеркнутая цена обозначена STRIKE
тег. Текст "Новая цена со скидкой..." находится в P
тег. С помощью этой информации мы можем написать код. Это Java, потому что я не знаю, какой язык вы хотите, и я не знаком с фреймворком Galen.
// gets the collection of containers using a CSS selector
List<WebElement> containers = driver.findElements(By.cssSelector("div.planbox"));
// loops through the containers
for (WebElement container : containers)
{
// determine if the STRIKE tag exists
boolean strikeExists = !container.findElements(By.tagName("strike")).isEmpty();
// determine if the "New discount price is..." text exists in the 2nd P tag
boolean discountPriceExists = container.findElements(By.tagName("p")).get(1).getText().trim().contains("New discount price is");
// if both are true log a pass, otherwise log a fail
if (strikeExists && discountPriceExists)
{
// log a pass
}
else
{
// log a fail
}
}
Я не использовал много селена. Но вы можете перенести этот код JQuery на селен,
//if there is a strike element
if($(".baseprice span strike").length > 0){
//next() will select the sibling of the p tag with baseprice class
$("p.baseprice).next() != undefined){
return true
}else{
return false
}
}
Вы можете использовать Гален для этого. Там вы можете проверить определенные свойства CSS.