等待处理程序注册 - selenium

时间:2013-12-05 13:14:33

标签: selenium

有一个带按钮的html页面,我的selenium测试正在测试,单击按钮时会执行一个动作。

问题是,在执行javascript之前,看起来点击发生了 - 在处理程序绑定到页面之前。结果是,硒测试会点击按钮,但不会发生任何动作。

我可以通过反复尝试单击然后观察来解决此问题,如果所需的操作发生(通常在页面上存在某些元素)。我想听听有一些更优雅的解决方案......

2 个答案:

答案 0 :(得分:1)

没有明确的方法可以说“等到元素X有这样的处理程序”;这是JavaScript和DOM的限制(例如参见Get event listeners attached to node using addEventListenerjQuery 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;
        }
    }