在页面加载后重新加载div元素时,在Selenium测试中找不到元素

时间:2013-09-05 11:28:49

标签: selenium-webdriver

我正在创建一个自动化框架,我需要从元素中获取值并将其与我之前收集的值相匹配。现在,问题是,div值在页面加载后更新,所以即使在添加隐式等待/流畅等待/ Thread.sleep之后代码也不起作用。 但是当我调试代码时,代码无需进行任何更改即可正常工作。我不确定必须采取哪些措施。

由于我是新用户,我无法在此问题中添加图像,但最初的 “total:value”是“Total:0”并且填充需要一些时间才能更改,但由于页面已预先加载,因此超时无效。

请提出建议。

        String sID = oIPops.getLocator("<value from properties file>");

    /*
    WebDriverWait wait = new WebDriverWait(driver,40);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(sID)));
    */

    try {
        Thread.sleep(10);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       

    String tValue = driver.findElement(By.id(sID)).getText();
    System.out.println(""+tValue);  // it will print Total : <populated value>

   // Extracting the number from the string to match with data I have beforehand
    char num = tValue.charAt(7);
    String character = "+" + num;
    Integer newNum = new Integer(character);
    if (value == newNum)
    {
        logger.info("Sum of Situations on Cluster "+title+ " matches with the total value from situation table");
    }
    else
    {
        logger.error("Sum of Situations on Cluster "+title+ " does not match with the total value from situation table");
    }

1 个答案:

答案 0 :(得分:0)

这很容易。您所做的只是使用FluentWait类的.ignoring方法处理元素异常,然后重试(在有限循环内)重新找到元素并重试。如果不使用FluentWait可能会更容易,然后只需处理常规Java方式的异常。