1

我正在使用 WebDriver(Eclipse -Java) 来自动化注册页面。单击“注册”按钮时,会显示“成功消息”,需要对其进行验证。

我可以在 IE8 中成功地做到这一点。但无法在 Firefox 中验证相同的内容。我尝试了不同的等待 1. d1.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

  1. WebDriverWait 等待 = new WebDriverWait(驱动程序, 10); wait.withTimeout(30, TimeUnit.SECONDS); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ElmId"));

  2. 等待等待 = 新 FluentWait 等待 = 新 FluentWait(d1).withTimeout(60, SECONDS); wait.until(new Function() wait.until(ExpectedConditions.visibilityOf(d1.findElement(By.id("elementid"))));

有没有人遇到过类似的问题?有什么解决办法吗?

4

2 回答 2

0

也许您可以尝试使用其他条件类型?或者您也可以尝试通过覆盖 apply 方法来编写自己的。当使用提供的条件还不够时,我很少遇到这种情况。只有在使用我自己版本的 apply 方法后它才成功。

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
        .pollingEvery(pollingInterval,
            TimeUnit.MILLISECONDS);
    return wait.until(new ExpectedCondition<WebElement>() {

        @Override
        public WebElement apply(WebDriver arg0) {
            List<WebElement> findElements = driver.findElements(By.className(someClassName));
            for (WebElement webElement : findElements) {
                if (webElement.getText().equals(string)) {
                    return webElement;
                }
            }
            return null;
        }
    });

例如,这样的事情几次很有帮助。

于 2012-05-09T08:49:22.357 回答
0

单击按钮后的“成功消息”:它是使用 ajax/javascript 显示还是重新加载页面?

如果您使用 js 执行此操作,有时可能无法使用 WebDriver 命令验证消息,您也需要使用 js 进行验证。就像是:

Object successMessage = null;
int counter = 0;

    while ((successMessage == null) && counter < 5)
    {
        try
        {
            ((JavascriptExecutor)driver).executeScript("return document.getElementById('yourId')");
        }
        catch (Exception e)
        {
            counter +=1;
        }
    }

    if (successMessage != null) //would be better to use some assertion instead of conditional statement
    {
        //OK
    }
    else
    {
        //throw exception
    }

while 循环是伪等待功能的丑陋方式。如果您不需要等待元素,您也可以将其删除。

替代方案可能是

Object result = ((JavascriptExecutor)driver).executeScript("return document.body.innerHtml"); 
String html = result.toString();

然后手动解析html。

于 2012-05-16T17:43:32.557 回答