Selenium не видит содержимое модального окна div

Здравствуйте! Подскажите, пожалуйста. Есть блок с кнопкой, при нажатии на кнопку открывается модальное окно(модальное окно div) с инпутами(что-то типа формы), задний фон затемняется. Далее я пытаюсь найти инпут и ввести в него текст. Но тут оказывается, что этот div недоступен. Не получается найти ни одного элемента в этом div. Но получается найти контейнер этого div, но вот содержимое его как будто бы пустое. В чем может быть причина?
Если это имеет значения все действия до происходят в iframe. Выполнен переход в iframe. Выполняются некоторые действия на странице, все работает. Но при клике на кнопку, которая открывает модальное окно содержимое недоступно. Нужно как-то переключаться в это модальное окно div? Я уже пробовала и switchTo() и window() от безысходности, но из того, что прочитала в интернете , как я поняла, если это модальное окно div, то переключаться на него не нужно. Ожидания не помогают.

async addEmail(completedForm_, buttonAddEmail) {
//Есть уже заполненная форма с кнопкой.
completedForm_ = await this.driver.wait(
until.elementLocated(By.xpath(this.completedFormXpath)),
20000
);

    await this.driver.wait(
        until.elementLocated(By.xpath(this.buttonEmailXpath)),
        20000
    );

//Находим в форме кнопку по которой хотим кликнуть
buttonAddEmail = await completedForm_.findElement(
By.xpath(this.buttonEmailXpath)
);
//Просто на всякий случай.
await this.driver.sleep(20000);
//Кликаем
await buttonAddEmail.click();
// Просто на всякий случай
await this.driver.sleep(20000);
//Нашли контейнер модального окна div.Он доступен. Работает
await this.driver.wait(
until.elementLocated(By.xpath(‘/html/body/div[7]’)),
20000
);
let container = await this.driver.findElements(By.xpath(‘/html/body/div[7]’));

//Далее не могу найти ни один инпут. Пробовала искать просто по this.driver и также внутри container. То что ниже уже не работает. Также пробовала искать по xpath, по id. Пробовала с разными инпутами, которые есть(их там много). Тип ошибки: TimeoutError: Waiting for element to be located By …
await this.driver.wait(
until.elementLocated(By.xpath(‘//*[@id=“input_441”]’)),
20000
);

Caйт - https://cloud.google.com/products/calculator Там заполняется первая форма, нажимаем кнопку ‘‘add to estimate’’ .Далее появится заполненная форма слева(которая уже не будет доступна для редактирования) у этой формы есть кнопка ‘‘email estimate’’ кликаем на нее и открывается модальное окно div , у которого доступен только контейнер

В данном случае у вас iframe внутри iframe. У меня все получилось на java selenium.
Для наглядности добавил скролы экрана, чтоы все было видно.

@Test
    public void test3() {
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.get("https://cloud.google.com/products/calculator");
        JavascriptExecutor executor = (JavascriptExecutor)driver;
        executor.executeScript("window.scrollBy(0,document.body.scrollHeight)");
        executor.executeScript("window.scrollBy(0,-500)");
        driver.switchTo().frame(0);
        driver.switchTo().frame(driver.findElement(By.id("myFrame")));
        driver.findElement(By.id("feedback_quote")).click();
        driver.switchTo().defaultContent();
        executor.executeScript("window.scrollBy(0,-document.body.scrollHeight/2+1000)");
        driver.switchTo().frame(0);
        driver.switchTo().frame(driver.findElement(By.id("myFrame")));
        driver.findElement(By.name("description")).sendKeys("test");
    }

1 лайк

Да, там фрейм внутри которого еще один фрейм и все действия происходят в контексте внутреннего фрейма, это у меня было изначально в коде тоже, если бы переход не был осуществлен то и другие манипуляции в этом контексте были бы невозможны(поэтому не стала делать на этом акцент так как другой код с взаимодействием внутреннего фрейма работал), но спасибо вам огромное вы решили мою проблему. Проблема решилась, как вы и написали, выходом из фрейма и переключением на эти фреймы снова. Спасибо:)