2013-12-05 3 views
1

Существует страница html с кнопкой, и мой тест selenium тестирует, что при нажатии кнопки выполняется действие.wait on handler registration - selenium

Проблема заключается в том, что это похоже на то, что клик происходит до запуска javascript - до того, как обработчик привязан к странице. Следствием этого является то, что тест селена будет нажимать на кнопку, но никаких действий не происходит.

Я могу решить эту проблему, неоднократно пытаясь щелкнуть, а затем наблюдать, если произошло требуемое действие (какой-то элемент присутствует на странице, как правило). Хотелось бы услышать, что есть еще несколько элегантных решений ...

ответ

1

Не существует четкого способа сказать: «Подождите, пока элемент X не имеет такого-то-такого обработчика»; это ограничение JavaScript и DOM (см., например, Get event listeners attached to node using addEventListener и jQuery find events handlers registered with an object), и в этом случае ожидаемое состояние селена не может быть создано, по крайней мере, не тривиально.

Я прибегал к time.sleep(0.5).

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; 
     } 
    }