有一个带按钮的html页面,我的selenium测试正在测试,单击按钮时会执行一个动作。
问题是,在执行javascript之前,看起来点击发生了 - 在处理程序绑定到页面之前。结果是,硒测试会点击按钮,但不会发生任何动作。
我可以通过反复尝试单击然后观察来解决此问题,如果所需的操作发生(通常在页面上存在某些元素)。我想听听有一些更优雅的解决方案......
答案 0 :(得分:1)
没有明确的方法可以说“等到元素X有这样的处理程序”;这是JavaScript和DOM的限制(例如参见Get event listeners attached to node using addEventListener和jQuery find events handlers registered with an object),就此而言,无法创建硒预期条件,至少不是非常简单。
我使用了time.sleep(0.5)
。
答案 1 :(得分:0)
你可以编写一些逻辑来处理这个问题。
我编写了一个返回WebElement
的方法,此方法将被调用三次,或者您可以增加时间并为WebElement
添加空检查
这是一个例子
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("https://www.crowdanalytix.com/#home");
WebElement webElement = getWebElement(driver, "homekkkkkkkkkkkk");
int i = 1;
while (webElement == null && i < 4) {
webElement = getWebElement(driver, "homessssssssssss");
System.out.println("calling");
i++;
}
System.out.println(webElement.getTagName());
System.out.println("End");
driver.close();
}
public static WebElement getWebElement(WebDriver driver, String id) {
WebElement myDynamicElement = null;
try {
myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By
.id(id)));
return myDynamicElement;
} catch (TimeoutException ex) {
return null;
}
}