Как улучшить производительность функции восстановления? - PullRequest
0 голосов
/ 16 апреля 2020

Я создал рекурсивную функцию. Цель этой функции - просмотреть все фреймы, чтобы найти элемент. Но это очень медленно.

Ниже вы найдете функцию:

private WebElement browseFramesToFindElement(By locator) {
    WebElement element = null;
    if (isElementPresent(locator, 1))
        element = this.driver.findElement(locator);

    if (element == null) {
        List<WebElement> frames = this.driver.findElements(By.xpath("//frame"));
        int i = 0;
        while (i < frames.size() && element == null) {
            this.driver.switchTo().frame(this.driver.findElement(By.xpath("//frame[@id = '" + frames.get(i).getAttribute("id") + "']")));
            element = browseFramesToFindElement(locator);
            if (element == null)
                driver.switchTo().parentFrame();
            i++;
        }
    }
    return element;
}

private boolean isElementPresent(By by, int secToWait) {  
    this.driver.manage().timeouts().implicitlyWait(secToWait, TimeUnit.SECONDS);  
    try {  
        this.driver.findElement(by);  
        return true;  
    } catch (NoSuchElementException e) {  
        return false;
    }
}

Не могли бы вы сказать, возможно ли улучшить производительность? И как? Заранее спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

Я не уверен, что ваши проблемы с производительностью связаны с тем, что у вас неэффективный алгоритм рекурсии. Я бы посоветовал вам:

  • Изменить локаторы xpath на css локаторы (вероятно, это поможет)
  • Настроить тайм-ауты ожидания и посмотреть результат (не уверен, но это может дать направление)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...