UNPKG

@serenity-js/protractor

Version:

Adapter that integrates @serenity-js/web with Protractor, enabling Serenity/JS reporting and using the Screenplay Pattern to write end-to-end test scenarios

42 lines (33 loc) 1.32 kB
import { RootLocator } from '@serenity-js/web'; import type * as protractor from 'protractor'; import { promised } from '../../promised'; /** * Protractor-specific implementation of [`RootLocator`](https://serenity-js.org/api/web/class/RootLocator/). * * @group Models */ export class ProtractorRootLocator extends RootLocator<protractor.ElementFinder> { constructor(private readonly browser: protractor.ProtractorBrowser) { super(); } async isPresent(): Promise<boolean> { return true; } async nativeElement(): Promise<Pick<protractor.ElementFinder, 'element' | 'all'>> { return { element: this.browser.element.bind(this.browser), all: this.browser.element.all.bind(this.browser), }; } async switchToFrame(element: protractor.ElementFinder): Promise<void> { // https://github.com/angular/protractor/issues/1846#issuecomment-82634739; const webElement = await element.getWebElement(); await promised(this.browser.switchTo().frame(webElement)); } async switchToParentFrame(): Promise<void> { await promised(this.browser.driver.switchToParentFrame()); } async switchToMainFrame(): Promise<void> { await promised(this.browser.driver.switchTo().defaultContent()); } }