Цикл для поиска iframs и переключения на него не работает - PullRequest
1 голос
/ 18 июня 2019

Я сделал цикл для iframe локатора с кодом Java но это не работает. Кто-нибудь может увидеть проблему?

вызов класса с:

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            WebElement searchButton = IFrameLocator.switchToIFrameWithElement(driver,driver.findElement(By.cssSelector("[href*='Search.mvc'][class*='magnify']")));

and use this after:

searchButton.click();


public class IFrameLocator {

    public static WebElement switchToIFrameWithElement(WebDriver driver, WebElement element) {
        try {
            driver.switchTo().defaultContent();
            element.isDisplayed();
        } catch (Exception continueFlow) {

            WebDriverWait wait = new WebDriverWait(driver, 20);
            List<WebElement> frames = driver.findElements(By.cssSelector("iframe"));
            for (WebElement frame : frames) {
                driver.switchTo().defaultContent();
                try {
                    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame));
                    if (element.isDisplayed()) {
                        break;
                    }
                } catch (NoSuchElementException | StaleElementReferenceException | ElementNotInteractableException ignored) {
                }
            }
        }   return element;
    }
}

1 Ответ

0 голосов
/ 20 июня 2019

Поскольку я проходил весь Webelement по cssSelector, он даже не зацикливался.Поэтому я передаю элемент следующим образом:

WebElement searchButton = IFrameLocator.switchToIFrameWithElement (driver, By.cssSelector ("[href * = 'Search.mvc'] [class * = 'magnify']"));

Итак, я изменил код и удалил By.cssSelector в 2 точках, и теперь все работает нормально:

открытый класс IFrameLocator {

public static WebElement switchToIFrameWithElement(WebDriver driver, By element) {
    driver.switchTo().defaultContent();

    try {
        if (driver.findElement(element).isDisplayed()) ;
        {
            System.out.println("Element is displayed on main page");
        }
    } catch (Exception continueFlow) {
        List<WebElement> frames = driver.findElements(By.cssSelector("iframe"));
        for (WebElement frame : frames) {
            driver.switchTo().defaultContent();
            System.out.println("going back to main page");
            try {
                driver.switchTo().frame(frame);
                System.out.println("switched to next frame: " + frame);
                if (driver.findElement(element).isDisplayed()) {
                    System.out.println("element is found in frame: " + frame);
                    break;
                }
            } catch (NoSuchElementException | StaleElementReferenceException | ElementNotInteractableException ignored) {
            }
        }
    }  System.out.println("returned element succesfully");
    return driver.findElement(element);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...