在UiBinder中为GWT小部件设置'id'。
例如。的
还在* .gwt.xml
中添加了然后我在Selenium测试用例中尝试这个
WebElement element = driver.findElement(By.id("gwt-debug-loginButton"));
有时它可以正常工作。但有时会抛出以下异常,
无法找到元素: {“method”:“id”,“selector”:“gwt-debug-loginButton”}命令持续时间或 超时:62毫秒
我需要更新什么? 任何人都可以帮助我吗?
答案 0 :(得分: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
}
答案 1 :(得分:3)
当您尝试使用selenium WebDriver
在网页上查找任何元素时。
您可以driver
等待页面完全加载,方法是使用Implicit Wait或Explicit Wait
隐式等待的示例(此代码通常在初始化驱动程序后使用) -
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 here的API(您可以在此课程中使用许多有趣的变体)
(注意:只有当驱动程序找不到代码所需的元素时,驱动程序才会等待指定的时间段,如果驱动程序找到了一个元素,那么它只会继续执行)< / p>