在量角器测试中无法找到iframe

时间:2017-09-28 04:50:49

标签: iframe selenium-webdriver jasmine protractor

我正在尝试找到iframe中的元素。所以我尝试切换到iframe。

html中的iframe:

<iframe id="id_of_iframe"  data-app-id="com.s-h.ph.pr" class="external-app ng-scope ng-isolate-scope" ng-if="!vm.appDisabled"  ng-attr-sandbox="{{vm.iframeConfig.sandbox ? vm.iframeConfig.sandbox : ''}}" tp-onload="vm.sendCurrentRouteToIFrame()" style="border: none; border-width: 0; height: 100%; width: 100%; display: block;" sandbox="allow-forms allow-popups allow-pointer-lock allow-same-origin allow-scripts allow-top-navigation allow-modals"></iframe> 

使用的代码:

 browser.switchTo().frame('id_of_iframe');

我收到以下错误:

 Failed: no such frame
      (Session info: chrome=61.0.3163.100)
      (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c58
10906a),platform=Windows NT 6.1.7601 SP1 x86_64)
  Stack:
    NoSuchFrameError: no such frame
      (Session info: chrome=61.0.3163.100)
      (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c58
10906a),platform=Windows NT 6.1.7601 SP1 x86_64)
        at WebDriverError (C:\Users\z002ex9t\AppData\Roaming\npm\node_modules\pr
otractor\node_modules\selenium-webdriver\lib\error.js:27:5)
        at NoSuchFrameError (C:\Users\z002ex9t\AppData\Roaming\npm\node_modules\
protractor\node_modules\selenium-webdriver\lib\error.js:180:5)
        at Object.checkLegacyResponse (C:\Users\z002ex9t\AppData\Roaming\npm\nod
e_modules\protractor\node_modules\selenium-webdriver\lib\error.js:505:15)
        at parseHttpResponse (C:\Users\z002ex9t\AppData\Roaming\npm\node_modules
\protractor\node_modules\selenium-webdriver\lib\http.js:509:13)
        at doSend.then.response (C:\Users\z002ex9t\AppData\Roaming\npm\node_modu
les\protractor\node_modules\selenium-webdriver\lib\http.js:440:13)
        at process._tickCallback (internal/process/next_tick.js:109:7)

我使用以下版本: “量角器”:“5.1.2”, “茉莉花”:“2.8.0”  webdriver-manager 12.0.6

知道如何解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

你可以通过提供

来尝试传递索引
browser.switchTo().frame("index of the frame"); 

这是最简单的一个,也许我们可以弄清楚它是id还是别的问题。因为你给出的id是直截了当的,我没有看到它失败的原因

答案 1 :(得分:1)

WebDriver的driver.switchTo().frame()方法采用以下三种可能的参数之一:

  1. 数字(iframe的索引)
  2. 名称或ID(如果iframe具有ID或名称属性)
  3. WebElement(如果iframe需要由任何自定义逻辑标识)
  4. 示例:

    请考虑以下iframe中可用的iframe。

    <强> Iframe1:

    <iframe name="iframe1" id="iframe_1" class="iframe_1">
    </iframe>
    

    <强> Iframe2:

    <iframe name="iframe2" id="iframe_2" class="iframe_2">
    </iframe>
    

    <强> Iframe3:

    <iframe name="iframe3" id="iframe_3" class="iframe_3">
    </iframe>
    

    使用索引:

    • browser.switchTo().frame(0) - 这将切换为iframe1
    • browser.switchTo().frame(1) - 这将切换为iframe2
    • browser.switchTo().frame(2) - 这将切换为iframe3

    名称或ID:

    • browser.switchTo().frame("iframe1")browser.switchTo().frame("iframe_1") - 这将切换为iframe1
    • browser.switchTo().frame("iframe2")browser.switchTo().frame("iframe_2") - 这将切换为iframe2
    • browser.switchTo().frame("iframe3")browser.switchTo().frame("iframe_3") - 这将切换为iframe3

    <强> WebElement

    • browser.switchTo().frame(element(by.tagName("iframe")).getWebElement())browser.switchTo().frame(element(by.css(".iframe_1")).getWebElement()) - 这将切换为iframe1
    • browser.switchTo().frame(element(by.css(".iframe_2")).getWebElement())browser.switchTo().frame(element(by.xpath(".//iframe[@id='iframe_2']")).getWebElement()) - 这将切换为iframe2

答案 2 :(得分:0)

如果有框架使用xpath

//iframe[@data-app-id='com.s-h.ph.pr']

但我仍然建议您首先使用id