Как проверить, есть ли зачеркнутый текст в селеновом вебдрайвере?

Есть много планшетов, которые имеют один и тот же класс и идентификаторы, внутри них есть ряд <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.

Другие вопросы по тегам