2016-05-18 11 views
1

Ich schreibe e2e Tests für meine nicht-eckige App, mit Winkelmesser Version 3.3.0. Meine App lädt eine andere nicht-angulare App in einen iframe, und ich versuche, Tests mit dem ifraMed-in mit Protractor zu schreiben.Winkelmesser: Nicht-Angular App in einem Iframe testen

habe ich versucht, das oben unter Verwendung von browser.driver.ignoreSynchronization = true:

1.

var EC = protractor.ExpectedConditions; 
var button = $("div[automation-id='homescreen']") 
var isClickable = EC.elementToBeClickable(button); 

browser.wait(isClickable, 50000).then(function(){ 
     browser.driver.sleep(500); 
     button.click(); 
}) 

den Fehler „Received Fehlgeschlagen: unbekannter Fehler: Element am Punkt nicht angeklickt ist (326, 624) ... "

2.

var loc = by.id('myFrame'); 
el = browser.driver.findElement(loc) 
browser.driver.switchTo().frame(el); 

den Fehler empfangen" Fehler: nein ein solches Element: Nicht imstande Element zu finden: { "Methode": "CSS-Selektor", "Selektor": "* [id =" MyFrame "]"}“

selbst dachte el erfolgreich abgerufen wurde ..

3.

browser.driver.switchTo().frame(0); 

versucht, mit dem Index 1 und erhielt "fehlgeschlagen: keine solche Rahmen .." Fehler

4.

browser.driver.getAllWindowHandles() 

Nur ein Fenster empfangen ...

Antwort

0

Wenn dies der einzige iframe auf der Seite ist, sieht die Option 3 vielversprechend aus. Ich würde warten nur für die iframe anwesend zu sein, bevor es vermittlungs

// wait for the frame to be present 
var EC = protractor.ExpectedConditions; 
browser.wait(EC.presenceOf(element(by.tagName("iframe"))), 5000); 

// switch to frame 
browser.driver.switchTo().frame(0); 
+0

Leider ist dies nicht der einzige iFrame, wenn ich die URL mit browser.driver.getCurrentUrl() überprüfe, bekomme ich dieselbe URL wie zu Beginn der App. – lital

+0

@lital 'getCurrentUrl()' würde immer noch dieselbe URL geben - dies wird erwartet, da Sie auf der gleichen Seite bleiben. Wenn Sie mit dem von mir vorgeschlagenen Code keine Fehler bekommen, sind Sie tatsächlich in einen Iframe-Kontext gewechselt. – alecxe

+0

Scheint so, als ob es nicht funktioniert, weil ich nicht auf einen Knopf klicken kann, der im iFrame erscheint.Wie sollte ich iframe wechseln, wenn mehr als ein iframe vorhanden ist? – lital

0

So wechseln Sie Iframe

Für Nicht Angular Seite

browser.driver.switchTo() defaultContent.();

browser.driver.switchTo(). Frame ("Rahmen-ID oder Klassenname");

0

Bitte versuchen Sie diesen folgenden Code, iframe gehört nicht zu kantig App

browser.ignoreSynchronization = true; 
return browser.switchTo().frame(iFrameEle.getWebElement()) 
      .then(function(){ 
       // in the iframe.. 

      }) 
      .then(function(){ 
       // restore sync for angular 
       browser.ignoreSynchronization = false; 
       return browser.switchTo().defaultContent(); 
      }); 
0
var elem = element(by.xpath('.//div[contains(@id,\'contents\') and contains(@id,\'cke\')]/iframe')); 
     browser.sleep(3000); 
     elem.click(); 
     browser.switchTo().frame(elem.getWebElement()); 
     browser.sleep(3000); 
     element(by.tagName('body')).sendKeys('test'); // entering text on iframe 
     browser.switchTo().defaultContent(); 
     browser.sleep(3000); 

ich den obigen Code in meiner Anwendung und deren Arbeits verwendet. Hoffe es hilft dir. Ich klicke zuerst auf iframe und verschiebe den Fokus darauf.

Hinweis: Wenn ich Schlafzeit gebe dann funktioniert nur.