2017-09-28 56 views
0

我試圖找到iframe內的元素。所以我嘗試切換到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

任何想法如何解決這個問題?

在此先感謝。

+0

我不明白你爲什麼要提供它僅含有該行代碼段,這應該是是可測試? – user10089632

+0

請分享HTML和網址 – iamsankalp89

+0

失敗:沒有這樣的框架問題說這是真的有框架 – iamsankalp89

回答

1

能否請您給予

browser.switchTo().frame("index of the frame"); 

這是通過指數嘗試最簡單的一個,也許我們可以弄清楚它是否是id或其他問題。因爲你給的ID是直線前進,我沒有看到一個原因,它應該會失敗

+0

它沒有必要它有隻有一幀 – iamsankalp89

+0

是的,你是對的。我相應地編輯了我的答案 –

+0

@aayya他嘗試了相同的解決方案。奇怪,爲什麼它nt工作 – iamsankalp89

0

如果有一個框架使用xpath

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

但我仍建議你首先要使用id

1

的webdriver的driver.switchTo().frame()方法採用的三種可能的參數之一:

  1. 號碼(iframe的指數)
  2. 名稱或ID(如果IFRAME具有ID或名稱屬性)
  3. WebElement(如果iframe中需要由任何定製邏輯來識別)

示例:

請考慮以下iframe在您的DOM中可用。

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
相關問題