Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查SeleniumWebDriver中的某些文本是否有删除线?_Selenium_Galen - Fatal编程技术网

如何检查SeleniumWebDriver中的某些文本是否有删除线?

如何检查SeleniumWebDriver中的某些文本是否有删除线?,selenium,galen,Selenium,Galen,有许多planbox,它们具有相同的类和ID,其中有许多标记和装饰文本 <div class="planbox"> <p class="baseprice"> <span> <strike> $70 </strike> </span> </p> <p> New discount price is etc. </p> </di

有许多planbox,它们具有相同的类和ID,其中有许多
标记和装饰文本

<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>

$70

新的折扣价格是等

$70

现在,我的测试用例是-如果基价是删除线,那么只有新的折扣价

将显示,否则不显示

如何检查文本是否删除?即使我们得到了这个,我怎么检查新的折扣呢

如果文本未被删除,则不应显示

因为
标记中没有类,我可以检查它是否显示

我想到的一个解决方案是:在
标记中添加一个虚拟类,并使用
findChildren('span.dummyCLass')
它将导致所有webelements都具有dummyCLass

现在我将检查web元素是否有strike标记,这就是我被卡住的地方


最初,我考虑的是Jquery解决方案,但是不添加新类和Jquery是否可以呢?

我没有使用过很多selenium。但是您可以将这个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
   }
}

您不需要向任何元素添加类来完成此任务。通常,您不想编辑HTML。另一个问题是。。。如果可以找到要添加类的元素,则无需添加类来查找元素。:)

我处理这些任务的方法是找到包含您感兴趣的所有元素的最外层元素。我称之为“容器”。在这种情况下,您要做的是找到容器,并在其中循环查找删除线价格和“新折扣价格…”文本

容器是带有
planbox
类的
DIV
s。罢工价格由
罢工
标签表示。“新折扣价格…”文本位于
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
    }
}
//使用CSS选择器获取容器集合
列表容器=driver.findElements(By.cssSelector(“div.planbox”);
//在容器中循环
for(WebElement容器:容器)
{
//确定罢工标记是否存在
布尔罢工存在=!container.findElements(按.tagName(“罢工”)).isEmpty();
//确定第二个P标签中是否存在“新折扣价格为…”文本
布尔折扣价格exists=container.findElements(按.tagName(“p”)).get(1).getText().trim().contains(“新折扣价格为”);
//如果两者都为真,则记录通过,否则记录失败
如果(删除存在折扣价格(&F)
{
//记录通行证
}
其他的
{
//记录失败
}
}

您可以使用Galen进行此操作。您可以在那里验证某些信息。

您尝试了什么,结果如何?就像你在学校做的那样。。。请出示你的作品。:)这是获得问题答案的过程的一部分。它对你很有帮助,因为它迫使你调查自己的问题并仔细思考。它还向读者证明,你做了功课,并做出了合理的尝试来回答自己的问题。第三,它有助于读者发现和诊断问题,从而为您提供更好的答案,减少我们浪费的时间。@JeffC我已更新了我的问题。如果这回答了您的问题,请接受它作为答案,以便将问题标记为已回答。谢谢虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。