0

我正在尝试为这种情况找到合适的 ExpectedConditions 方法。我有一个图表,我想在重新排序图表后检查每一行中的文本。问题是,当图表刷新时,文本仍然存在,只是变灰了。因此,当我单击一个按钮以重新排序图表,然后立即查找我要查找的文本时,测试失败,因为文本尚未更改。我不能使用 visibilityOfElementLocated 因为当图表刷新时元素仍然可见,我只是在等待元素改变。

不知道这是否有意义!这是一个非常难以解释的问题。

一点背景知识:我正在使用 Selenium Java 并使用 Chrome 进行测试。到目前为止,这是我的方法。它工作得很好,我只需要弄清楚如何让程序等待足够长的时间让图表刷新而不使用睡眠语句。

非常感谢大家!我知道这不是很清楚,但是如果您需要任何澄清,请告诉我。

public void Check_for_text_in_column(String text, String row, String column)
{
    By by = By.xpath("//*[@id=\"table_Table_table_ktg\"]/tbody/tr[" + row + "]/td[" + column + "]/div/div/span");
    WebDriverWait wait = new WebDriverWait(getWebDriver(), WAIT_TIME);

    //This is the line that I need to change: 
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

    if(!element.getText().equals(text))
    {
        fail("\nDid not find text: " + text + "\nFound text: " + element.getText() + "\n");
    }
}

干杯!

4

1 回答 1

4

你可以更换

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

WebElement element = wait.until(ExpectedConditions.textToBePresentInElement(by, text));

编辑:

WAIT_TIME是等待的超时时间。

true如果在根据您的超时之前没有返回预期的条件WAIT_TIME,那么element将是null

因此,您的支票可能如下所示:

if(element == null)
{
    fail("\nDid not find text: " + text + "\nFound text: " + element.getText() + "\n");
}

编辑:

也许另一种选择可能是这样的:

public void Check_for_text_in_column(String text, String row, String column)
{
    By by = By.xpath("//*[@id=\"table_Table_table_ktg\"]/tbody/tr[" + row + "]/td[" + column + "]/div/div/span");
    WebDriverWait wait = new WebDriverWait(getWebDriver(), WAIT_TIME);

    // your original find
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

    // flag to set when text is found, for exiting loop
    boolean hasText = false;

    // counter for # of times to loop, finally timing out
    int tries = 0;

    // until text is found or loop has executed however many times...
    while (hasText == false && tries < 20) {

        // get the element
        element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));

        // if text is not present, wait 250 millis before trying again
        if(!element.getText().equals(text){
            Thread.sleep(250);
            tries++;
        }
        else{
            // text found, so set flag to exit loop
            hasText = true;
        }   
    }


    if(!element.getText().equals(text))
    {
        fail("\nDid not find text: " + text + "\nFound text: " + element.getText() + "\n");
    }
}

我知道你说过你不想要sleep陈述,但我假设你的意思是你只是不想要一个不必要的长陈述。甚至在内部ExpectedConditions使用sleep。它们sleep在轮询更改之间有几毫秒的时间 - 这正是它所做的,只是没有ExpectedCondition类型包装器。

于 2013-06-10T16:00:11.583 回答