分度器で iframe をテストするのは少しトリッキーです。何が起こっているのかを理解するのにしばらく時間がかかり、かなりの忍耐が必要でした。これが役立つことを願っています!
Protrator は WebdriverJS に基づいて構築されているため、パッケージ全体を使用して iframe をテストできます。分度器でテストを開始するとき、最初に行うことは、分度器のインスタンスを取得することです。
var ptor = protractor.getInstance();
ただし、iframe 内にあるものをテストするには、ptor ではなく ptor.driver が必要です。
var driver = ptor.driver;
次に、テストの作成を開始すると、iframe が見つかり、それに切り替えて、「driver」でテストし、最初のフレームに戻ります。
ptor.switchTo().frame(driver.findElement(protractor.By.xpath('xpath-to-iframe')));
// Test iframe with driver
driver.findElement(protractor.By.xpath('some-sort-of-input')).sendKeys('username');
driver.findElement(protractor.By.xpath('other-sort-of-input')).sendKeys('password');
driver.findElement(protractor.By.xpath('other-sort-of-button')).click();
// Switch back to Default Content
ptor.switchTo().defaultContent();
// And WAIT for angular!!
ptor.waitForAngular();
次のコードは、上で述べたことの一般的な例です。
describe('Protractor iframe Test', function(){
var ptor, driver;
beforeEach(function(){
ptor = protractor.getInstance();
driver = ptor.driver;
});
it('should test the iframe', function(){
ptor.switchTo().frame(driver.findElement(protractor.By.xpath('xpath-to-iframe')));
// Test iframe with driver
driver.findElement(protractor.By.xpath('some-sort-of-input')).sendKeys('username');
driver.findElement(protractor.By.xpath('other-sort-of-input')).sendKeys('password');
driver.findElement(protractor.By.xpath('other-sort-of-button')).click();
// At this point, you can expect() things to happen to the iframe app
// Switch back to Default Content
ptor.switchTo().defaultContent();
// And WAIT for angular!!
ptor.waitForAngular();
// Then you can keep testing (or expecting something!)
expect('this answer').toBe('useful');
});
});