server/page/video_editor.js
// AudioEdit object responsible for it is returned.
AudioEdit object responsible for it is returned.
AudioEdit object responsible for it is returned .
async openAudioEditTab() {
		this.log("Click audio edit button.")
		await this.clickButton(
			'//ytve-audio-editor-timeline[@id="AUDIO"]//iron-icon[contains(@class, "ytcp-icon-button")]'
		)
		await this.tab().waitFor(3000) 
		let audioEditPagePromise = new Promise((resolve) =>
			this.tab().once("popup", resolve)
		)
		this.log("Click another audio edit button to open pop-up.")
		await this.clickButton(
			'//ytcp-button[@id="audio-deep-link-button" and contains(@label, "+ Audio")]'
		)
		let audioEditPage = await audioEditPagePromise
		return await AudioEdit.New(audioEditPage)
	}
async openAudioEditTab ( ) { this . log ( "Click audio edit button." ) await this . clickButton ( '//ytve-audio-editor-timeline[@id="AUDIO"]//iron-icon[contains(@class, "ytcp-icon-button")]' ) await this . tab ( ) . waitFor ( 3000 ) let audioEditPagePromise = new Promise ( ( resolve ) => this . tab ( ) . once ( "popup" , resolve ) ) this . log ( "Click another audio edit button to open pop-up." ) await this . clickButton ( '//ytcp-button[@id="audio-deep-link-button" and contains(@label, "+ Audio")]' ) let audioEditPage = await audioEditPagePromise return await AudioEdit . New ( audioEditPage ) }
AudioEdit object responsible for it is returned.
AudioEdit object responsible for it is returned .
// TODO: workaround lamely necessary sleep.