3

T 在 UiBinder 本身中为 GWT 小部件设置“id”。

例如。

还添加了在 *.gwt.xml 中

然后我在 Selenium 测试用例中尝试这个

WebElement element = driver.findElement(By.id("gwt-debug-loginButton"));

有时它可以正常工作。但有时它会引发以下异常,

无法定位元素:{"method":"id","selector":"gwt-debug-loginButton"} 命令持续时间或超时:62 毫秒

我需要更新什么?谁能帮我?

4

2 回答 2

6

使用 WebDriverWait,在一定时间后搜索元素。像这样的东西。

try {
        (new WebDriverWait(driver, seconds, delay)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                try {
                    WebElement el = d.findElement(By.id("gwt-debug-loginButton"));
                    return true;
                } catch (Exception e) {
                    return false;
                }
            }
        });
    } catch (TimeoutException t) {
        //Element not found during the period of time
    }
于 2012-08-08T10:56:24.863 回答
3

当您尝试使用selenium WebDriver. 您可以driver通过使用隐式等待显式等待来等待页面完全加载

隐式等待示例(此代码通常在初始化驱动程序后使用)-

WebDriver driver = new FirefoxDriver();   
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

如果驱动程序找不到您要查找的元素,上述语句使驱动程序等待 10 秒。如果驱动程序即使在 10 秒后也找不到它,则驱动程序会引发异常。

显式等待的示例- 在您的情况下,这专门用于单个WebElement-

new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.id("gwt-debug-loginButton")));

上面的代码将使驱动程序等待 20 秒,直到找到元素。如果即使在 20 秒后也找不到该元素,则会引发 TimeoutException。您可以在此处检查 ExpectedCondition 的 API (您可以在此类中使用许多有趣的变体)

(Note that the driver will wait for the specified period of time only if it cannot find the element your code is looking for, if the driver finds an element then it simply continues with execution)

于 2012-08-08T17:23:35.517 回答