有许多planbox,它们具有相同的class和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')
将导致所有webelements都具有dummyClass。
现在我将检查网络元素是否有攻击标记,这就是我被卡住的地方。
最初,我在想一个Jquery解决方案,但是可以不添加新的类和jquery吗?
答案 0 :(得分: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
}
}
答案 1 :(得分: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
}
}
答案 2 :(得分:-1)
你可以使用Galen。在那里,您可以验证某些CSS properties。