Проблема заключается в том, что падает тест, когда доходит до определенного элемента. Ошибка NoSuchElementException: no such element: Unable to locate element.
Работаю с Idea/selenium/testng/java
Мой код выглядит так - Нахожу элемент и создаю метод:
By My_column_has_header = By.xpath("//div[@id=‘content’]/div[@id=‘cbHasHeader’]/child::input");
public CheckBoxes Put_My_column_has_header() {
driver.findElement(My_column_has_header).click();
return this;
}
}
Нужно найти элемент - чекбокс My column has header и кликнуть на него.
Я сделала порядка 6-7 вариантов xpath, но безрезультатно. Xpath искала в DevTools без всяких сторонних помогаторов. Все мои xpath находились по строке поиска. Попробовала поиск родительских, дочерних элементов и др.
Попробовала сделать Thread.sleep в надежде, что элемент не успел появиться - не сработало.
Предположила, что элемент скрыт за каким-то другим элементом - тоже не сработал вариант
В чем может быть проблема и что может помочь решить проблему?
Судя по скрину, ваш элемент находится в отдельном iframe.
Нужно сперва переключить контекст внутрь этого iframe, а потом уже искать элемент внутри него.
By Frame = By.xpath("//iframe[contains(@src, 'iframedAppPanel')]");
By Frame1 = By.id("sandboxFrame");
By Frame2 = By.id("userHtmlFrame");
и создать метод
public CheckBoxes switchFrame() {
driver.switchTo().frame(String.valueOf(Frame));
driver.switchTo().frame(String.valueOf(Frame1));
driver.switchTo().frame(String.valueOf(Frame2));
return this;
}
хотя не уверена, что это хорошее решение, но планирую использовать метод в тестах.
Сначала я искала By Frame = By.xpath("//iframe[contains(@src, ‘iframedAppPanel’)]"); и переключала с помощью switchTo().
Тогда xpath не находился. Была ошибка, что элемент не найден.
Потом, почитав некоторое руководство по selemium переписала код
driver.switchTo().frame(0);
driver.switchTo().frame(Frame1);
driver.switchTo().frame(Frame2);
получается, что я переключаюсь на driver.switchTo().frame(0), а дальше driver.switchTo().frame(Frame1) падает ошибка.
frame(0) - в скобках ноль, потому что у данного iframe нет id и name. Получается, что - это индекс, который определяет позицию iframe.