无法使用selenium webdriver(javascript)单击iframe内的按钮

时间:2017-10-27 15:14:51

标签: selenium selenium-webdriver webdriver chrome-web-driver

我有一个加载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 个答案:

答案 0 :(得分: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 ))然后再试一次