Невозможно нажать кнопку внутри iframe с селеновым веб-драйвером (javascript)
У меня есть страница, которая загружает iframe, но я получаю NoSuchElementError
Сообщения об ошибках. Мой код:
driver.wait(until.ableToSwitchToFrame(0)).then((d) => {
//*** SLEEP HERE
const button = By.css(".button");
driver.wait(until.elementLocated(dropdownElem)).then((btn) => {
btn.click();
});
});
Сначала я переключаюсь на правильный iframe, затем пытаюсь дождаться загрузки элемента внутри iframe. Если я вставлю driver.sleep(1000);
к линии //*** SLEEP HERE
это работает, иначе это терпит неудачу с:
NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":".button"
}
Почему не driver.wait
линия ждет, когда элемент станет доступным?
1 ответ
Я проверил это на своем локальном компьютере, и, кажется, он работал нормально для кнопки в Iframe. Вот код
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build();
driver.get('file:///Users/../sampleFiles/sample-iframe.html');
driver.wait(webdriver.until.ableToSwitchToFrame(0)).then((d) => {
//*** SLEEP HERE
const button = webdriver.By.css(".Button");
driver.wait(webdriver.until.elementLocated(button)).then((btn) => {
btn.click();
btn.getTagName().then((tag) => {
console.log(tag);
});
});
});
я получил button
на консоли
и Iframe HTML это проверено на
<html lang="en"><head>
<meta charset="UTF-8">
<title>Example of HTML Iframe</title>
</head>
<body>
<iframe src="file:///Users/../sampleFiles/sample.html" width="300" height="200">
<html><head>
<title>Page Title</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
<button id="ButtonID" class="Button">Click Me!</button>
</body></html>
</iframe>
</body></html>
Проверьте свои driver.wait(until.elementLocated(dropdownElem))
линия, кажется, есть опечатка, измените его на
driver.wait(until.elementLocated(button ))
и попробуй еще раз