如何等待,直到没有带有属性ready_to_send的span标签,或者换句话说,span标签已发送属性

时间:2018-07-13 12:05:29

标签: java selenium selenium-webdriver xpath webdriverwait

我将SeleniumJava一起使用。

许多divisions (divs)具有相同的class,但spans attributes是不同的...

HTML示例:

<div class="message_bubble">
    <span data-icon="ready_to_send" class="">
        .....
        .....
    </span>
</div>

// another div with same class="message_bubble"

<div class="message_bubble">
    <span data-icon="sent" class="">
        .....
        .....
    </span>
</div>

// again div with same class="message_bubble"

<div class="message_bubble">
    <span data-icon="received" class="">
        .....
        .....
    </span>
</div>

// There are many divs as such

ready_to_send发送到服务器时,其跨度attribute变为sent

如何让驱动程序等待,直到没有具有跨度属性ready_to_send的分区,或者换句话说,所有具有跨度attribute sent的分区。

我的无效代码是:

private Boolean GetStatus()
{
    WebDriverWait UntilSent = new WebDriverWait(driver, 10);

    Boolean Status;

    Status = UntilSent.until(new ExpectedCondition<Boolean>()
    {
        public Boolean apply(WebDriver driver) 
        {
            //int elementCount = driver.findElements(By.xpath("//span[@data-icon='ready_to_send']")).size();

            int elementCount = driver.findElements(By.xpath("//div[@class='message_bubble']/span[@data-icon='ready_to_send']")).size();
            System.out.println("UNSENT count is.... : "+elementCount);

            if (elementCount == 0)
                return true;
            else
                return false;
        }
    });

return Status;
}

2 个答案:

答案 0 :(得分:2)

要调用 waiter 直到没有带有 attribute <span>的{​​{1}}标签,您可以使用以下命令诱使 WebDriverwait notExpectedConditions子句以及presenceOfAllElementsLocatedBy()方法,您可以使用以下解决方案:

ready_to_send

或者,您也可以将诱因 WebDriverwait ExpectedConditions子句invisibilityOfAllElements()方法一起使用,并且可以使用以下解决方案:

Boolean bool1 = new WebDriverWait(driver, 20).until(ExpectedConditions.not(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//div[@class='message_bubble']/span[@data-icon='ready_to_send']"))));

答案 1 :(得分:1)

您可以使用此:

new WebDriverWait(driver, 10).until(ExpectedConditions.numberOfElementsToBeLessThan(By.xpath("//div[@class='message_bubble']/span[@data-icon='ready_to_send']"), 1));

这将一直等到找不到在xpath下的元素。

注意:您必须添加一些导入:

import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

在您的代码中是这样的:

private Boolean GetStatus()
{
    try {
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.numberOfElementsToBeLessThan(By.xpath("//div[@class='message_bubble']/span[@data-icon='ready_to_send']"), 1));
        return true;
    }catch (Exception e){
        return false;
    }
}