我有一个
angularjs应用程序包含一个iframe,显示允许登录到另一个网站的页面.我试图在iframe中包含的字段中放置一些值,但我找不到使用任何定位器的元素.
这是我的测试:
describe("Harvest",function() { beforeEach(function () { browser.get('http://localhost:8110/'); expect(browser.getCurrentUrl()).toMatch('_*#/login$'); element(by.model('user.username')).sendKeys('sam'); element(by.model('user.password')).sendKeys('pass'); element(by.id('bt_signin')).click(); }); afterEach(function () { browser.executeScript('window.sessionStorage.clear();'); }); describe('A user',function () { beforeEach(function () { browser.get('http://localhost:8110/'); }); it('should be able to obtain an access token from harvest',function () { expect(browser.getCurrentUrl()).toMatch('_*#/home$'); //Display and close the window element(by.id('btHarvest')).click(); expect(element(by.id('modalHarvest')).isPresent()).toBe(true); element(by.id('btCloseModal')).click(); expect(element(by.id('modalHarvest')).isPresent()).toBe(false); //Authenticate into harvest element(by.id('btHarvest')).click(); expect(element(by.id('modalHarvest')).isPresent()).toBe(true); browser.switchTo().frame('iframeHarvest'); //It fails here with a null exceptions,guess it can't find it element(by.id('email')).sendKeys(browser.params.harvestLogins.user); element(by.id('user_password')).sendKeys(browser.params.harvestLogins.password); element(by.id('sign-in-button')).click(); expect(element(by.name('commit')).isPresent()).toBe(true); browser.driver.switchTo().defaultContent(); }); }); });
这是生成的异常
1) Harvest A user should be able to obtain an access token from harvest Message: [31mError: Error while waiting for Protractor to sync with the page: {}[0m Stacktrace: Error: Error while waiting for Protractor to sync with the page: {} at Error (<anonymous>) ==== async task ==== WebDriver.executeScript() at null.<anonymous> (/Users/samdurand/workspace/cake/subbie/src/test/web/js/features/harvest.js:45:22) ==== async task ==== Asynchronous test function: it() Error at null.<anonymous> (/Users/samdurand/workspace/cake/subbie/src/test/web/js/features/harvest.js:26:5) at null.<anonymous> (/Users/samdurand/workspace/cake/subbie/src/test/web/js/features/harvest.js:20:3) at Object.<anonymous> (/Users/samdurand/workspace/cake/subbie/src/test/web/js/features/harvest.js:1:63)
1) Projects A user is possible to create a project based on harvest data Message: [31mError: Error while waiting for Protractor to sync with the page: {}[0m Stacktrace: Error: Error while waiting for Protractor to sync with the page: {} at Error (<anonymous>)
解决方法
如上所述,您面临的问题是因为您切换到的iframe是非角度的.因此,切换到该iframe后,元素(by.id)将无法工作.相反,需要使用findElement!