Невозможно нажать кнопку внутри iframe с веб-драйвером selenium (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 не ждет, пока элемент станет доступным?


person marchello    schedule 27.10.2017    source источник
comment
Вы пробовали waitUntil?   -  person user1207289    schedule 30.10.2017
comment
Я использую привязки nodejs selenium-webdriver, официально поддерживаемые selenium. Тот, который вы связали, - это webdriverIO, другая библиотека.   -  person marchello    schedule 30.10.2017
comment
@marchello, почему ты пометил вопрос как относящийся к webdriverio?   -  person iamdanchiv    schedule 30.10.2017
comment
@iamdanchiv, я хотел тег webdriver. виноват. исправлено сейчас.   -  person marchello    schedule 30.10.2017


Ответы (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 )) и повторите попытку

person user1207289    schedule 05.11.2017