1

有许多 planbox,它们具有相同的类和 id,其中有许多<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')它会导致所有 web 元素都具有 dummyClass。

现在我将检查网络元素是否有罢工标签,这就是我卡住的地方。

最初,我正在考虑一个 Jquery 解决方案,但是是否可以不添加新类和 jquery 来实现?

4

3 回答 3

2

您无需向任何元素添加类即可完成此任务。通常,您不想编辑 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
    }
}
于 2015-11-03T05:58:10.010 回答
1

我没有使用太多的硒。但是您可以将此 jquery 代码移植到 selenium,

 //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
   }
}
于 2015-11-03T02:19:51.327 回答
-1

您可以为此使用 Galen。在那里您可以验证某些CSS 属性

于 2015-11-04T07:58:30.103 回答