Hello,
i am using selenium webdriver for in my desktop application for sharing screen on zoom while working with two screens but i am not able to share screens as my code work previously - here is my code
const {Builder, By, Key, until} = require(‘selenium-webdriver’);
const { ipcMain } = require(‘electron’);
let driver;
const connectToWiniumDriver = async () => {
driver = await new Builder().usingServer(WINIUM_DRIVER_URL)
.withCapabilities({
‘app’: path.join(vendorsPath, ‘rundll32.exe’),
})
.forBrowser(‘windows’)
.build();
// await driver.manage().timeouts().implicitlyWait(3000);
};
ipcMain.on(‘connect-to-zoom-meeting’, async (event, args)=>{
try {
console.log(‘args’, args);
console.log(‘line 250’, currentTime());
if (args.meetingLink) {
//Check if zoom is present
let zoomPresent = checkForZoom();
if (zoomPresent.zoom === false ) {
return throwError({errMsg : ‘Zoom Application is not installed in your system. Please install to proceed.’});
}
//Check for Java
let javaPresent = await checkForJava();
if (javaPresent.java === false ) {
return throwError({errMsg : ‘JAVA is not installed in your system. Please install it to procced.’});
}
stopConnectingProcess = false;
locateChrome(async function(chromePath) {
try {
await updatePreference();
/** Find zoom running process /
const { matchingProcess: runningZoomProcess } = await findProcessByName([{
processName: ‘Zoom’,
processTitle: ‘Zoom Meeting’
}], false);
console.log(‘line 259’, currentTime());
/* kill process if zoom is already running */
try {
runningZoomProcess.map(zoomProcess => {
kill(zoomProcess.pid);
});
} catch (e) {
console.log(‘error in killing zoom running process:’, e);
}
console.log(‘line 268’, currentTime());
try {
if (_.isNull(chromePath) || _.isUndefined(chromePath)) {
let chromiumPath = path.join(vendorsPath, ‘chromium’, ‘chrome.exe’);
zoomBrowser = await puppeteer.launch({…puppeteerOptions, executablePath: chromiumPath});
} else {
zoomBrowser = await puppeteer.launch({…puppeteerOptions, executablePath: chromePath});
}
} catch (e) {
try {
if (!zoomBrowser) {
zoomBrowser = await puppeteer.connect({browserURL:BROWSER_DEBUG_URL, defaultViewport: null});
}
} catch (e) {
console.error(‘error in opening browser’, e);
// Throw error
throwError({ errMsg: ‘We are not able to open browser, Please try again.’ });
return;
}
}
connectToWiniumDriver();
console.log(‘line 293’, currentTime());
win.webContents.send(‘update-loader’, { message: ‘Opening meeting link’ });
zoomPageTarget = await zoomBrowser.newPage();
console.log('line 315', currentTime());
let zoomMeetingInvitaion = args.meetingLink;
let zoomMeetingPasscode = args.meetingPasscode;
let zoomMeetingUsername = args.userName ? args.userName : 'Unknown';
await zoomPageTarget.goto(zoomMeetingInvitaion);
console.log('line 328', currentTime());
console.log('fully loaded');
await zoomPageTarget.hover('body').then(async () => {
ks.setOption('globalDelayPressMillisec', 10);
await ks.sendKeys(['left', 'enter']);
console.log('zoom launcher page launched with no errors');
}).catch((e) => {
console.log('zoom launcher error:', e);
});
// await sleep(7000);
win.webContents.send('update-loader', { message: 'Opening and detecting zoom meeting' });
let totalWaitingTime = 8000;
let waitingTimeBetweenIteration = 500;
let timeConsumed = 0;
let meetingStartedProcessResult = false;
console.log('line 347', currentTime());
for (let i = 0; true; i++) {
meetingStartedProcessResult = await findProcessByName([{
processTitle: 'Connecting.',
processName: 'Zoom'
}, {
processTitle: 'Waiting for Host',
processName: 'Zoom'
}, {
processTitle: 'Enter meeting passcode',
processName: 'Zoom'
}, {
processTitle: 'Zoom',
processName: 'Zoom'
}, {
processTitle: 'This meeting is being recorded by the host or a participant',
processName: 'Zoom'
}, {
processTitle: 'Zoom Meeting',
processName: 'Zoom'
}, {
processTitle: 'Video Preview',
processName: 'Zoom'
}], false);
console.log('meetingStartedProcessResult', meetingStartedProcessResult);
if (meetingStartedProcessResult.found) {
await zoomBrowser.close();
break;
}
if (stopConnectingProcess) {
break;
}
if (timeConsumed >= totalWaitingTime) {
break;
}
await sleep(waitingTimeBetweenIteration);
timeConsumed += waitingTimeBetweenIteration;
}
console.log('line 373', currentTime());
console.log('meetingStartedProcessResult 380', meetingStartedProcessResult);
if (!meetingStartedProcessResult.found) {
win.webContents.send('update-loader', { message: 'Meeting not detected, trying to open meeting' });
try {
// win.minimize();
// await sleep(1000);
ks.setOption('globalDelayPressMillisec', 100);
await ks.sendKeys(['left', 'enter']);
if (await driver.findElement(By.name('Open Zoom Meetings?')).isDisplayed()) {
console.log('in true');
// await driver.findElement(By.name('Address and search bar')).click();
await sleep(100);
ks.setOption('globalDelayPressMillisec', 100);
await ks.sendKeys(['tab', 'tab', 'space', 'tab', 'enter']);
console.log('355 process end');
// win.restore();
}
} catch (e) {
// win.restore();
console.log(e);
console.log('in catch, popop not found');
}
}
console.log('line 413', currentTime());
win.webContents.send('update-loader', { message: 'Detecting meeting' });
totalWaitingTime = 10000;
timeConsumed = 0;
let zoomMeeting = {};
for (let i = 0; true; i++) {
console.log('loop started', i, currentTime());
let findProcessResult;
findProcessResult = await findProcessByName([{
processTitle: 'Zoom Meeting',
processName: 'Zoom',
exactMatch: false
}, {
processTitle: 'Connecting.',
processName: 'Zoom'
}, {
processTitle: 'Waiting for Host',
processName: 'Zoom'
}, {
processTitle: 'Enter meeting passcode',
processName: 'Zoom'
}, {
processTitle: 'This meeting is being recorded by the host or a participant',
processName: 'Zoom'
}, {
processTitle: 'Video Preview',
processName: 'Zoom'
}, {
processTitle: 'Zoom',
processName: 'Zoom'
}
], true);
console.log('findProcessResult', JSON.stringify(findProcessResult));
console.log('loop started', i, currentTime());
let zoomMeetingRunning = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('Zoom Meeting') && x.processName === 'Zoom');
let waitingForHost = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('Zoom') && x.processName === 'Zoom');
let meetingPasscode = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('Enter meeting passcode') && x.processName === 'Zoom');
let connectingWindow = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('Connecting.') && x.processName === 'Zoom');
let zoomWindow = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('Zoom') && x.processName === 'Zoom');
let recordingWindow = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('This meeting is being recorded by the host or a participant') && x.processName === 'Zoom');
let videoPreviewWindow = _.filter(findProcessResult.matchingProcess, x => x.mainWindowTitle.includes('Video Preview') && x.processName === 'Zoom');
if (stopConnectingProcess) {
process.kill(findProcessResult.matchingProcess[1].pid);
break;
}
if (zoomMeetingRunning.length > 0) {
win.webContents.send('update-loader', { message: 'Meeting detected, trying to connect' });
[zoomMeeting] = zoomMeetingRunning;
console.log('Meeting Started');
break;
} else if (waitingForHost.length > 0) {
console.log('Please wait for the host to start this meeting.');
win.webContents.send('update-loader', { message: 'Asking to be let in... You will join the call when someone lets you in', type: 'waiting-for-host-zoom' });
timeConsumed = 0;
} else if (meetingPasscode.length > 0) {
if (zoomMeetingPasscode) {
win.webContents.send('update-loader', { message: 'Entering meeting passcode' });
await pw.focusWindow(findProcessResult.process);
await ks.sendText(zoomMeetingPasscode);
await ks.sendKeys(['tab', 'enter']);
} else {
win.webContents.send('update-loader', { message: 'Please enter meeting passcode' });
await pw.focusWindow(findProcessResult.process);
}
timeConsumed = 0;
} else if (connectingWindow.length > 0) {
console.log('Connecting.. waiting for response');
win.webContents.send('update-loader', { message: 'Connecting.. waiting for response' });
timeConsumed = 0;
} else if (recordingWindow.length > 0) {
win.webContents.send('update-loader', { message: 'Meeting detected, trying to connect' });
let [recordingWindowProcess] = recordingWindow;
await pw.focusWindow(recordingWindowProcess);
await ks.sendKeys(['tab', 'tab', 'tab', 'space']);
timeConsumed = 0;
continue;
} else if (videoPreviewWindow.length > 0) {
win.webContents.send('update-loader', { message: 'Video Preview, trying to start meeting' });
let [recordingVideoProcess] = videoPreviewWindow;
await pw.focusWindow(recordingVideoProcess);
await ks.sendKeys(['tab', 'tab', 'tab', 'space', 'tab', 'space']);
timeConsumed = 0;
continue;
} else if (zoomWindow.length > 0) {
// try {
// if(await driver.findElement(By.name('Leave & Start')).isDisplayed()) {
// console.log('Leave & Start, found');
// await driver.findElement(By.name('Leave & Start')).click();
// }
// } catch(e) {
// try {
// if (await driver.findElement(By.name('Please enter meeting passcode')).isDisplayed()) {
// console.log('Please enter meeting passcode, found');
// await driver.findElement(By.name('Please enter meeting passcode')).click();
// await ks.sendText(zoomMeetingPasscode);
// await ks.sendCombination(['shift', 'tab']);
// await driver.findElement(By.className('EditWnd')).clear();
// await ks.sendText(zoomMeetingUsername);
// await ks.sendKeys(['tab', 'tab', 'tab', 'tab', 'tab', 'tab', 'space']);
// }
// } catch (e) {
// console.log('in catch, enter only username');
// console.log('Entering username');
// await pw.focusWindow(findProcessResult.process);
// await ks.sendText(zoomMeetingUsername);
// await ks.sendKeys(['tab', 'tab', 'tab', 'tab', 'tab', 'space']);
// }
// }
// timeConsumed = 0;
}
if (timeConsumed >= totalWaitingTime) {
console.log(`Waiting time is more then ${timeConsumed}ms, closing this loop`);
break;
}
console.log('loop ended, waiting for some time', i, currentTime());
await sleep(waitingTimeBetweenIteration);
console.log('finally loop ended starting new loop', i, currentTime());
timeConsumed += waitingTimeBetweenIteration;
}
console.log('line 515', currentTime());
console.log('reset process');
if (!stopConnectingProcess) {
if (zoomMeeting.mainWindowTitle) {
meetingName = zoomMeeting.mainWindowTitle;
meetingProcess = zoomMeeting;
meetingConnected = true;
isMeetingProcessRunning();
win.webContents.send('process-found', {
processFound: true,
meetingType
});
await pw.focusWindow(meetingProcess);
ks.sendCombination(['windows', 'up']);
} else {
const processFound = await resetProcess('Zoom Meeting');
if (processFound) {
meetingConnected = true;
isMeetingProcessRunning();
}
win.webContents.send('process-found', {
processFound,
meetingType
});
}
}
try {
await zoomBrowser.close();
} catch (e) {
/** Do nothing */
}
} catch (e) {
console.error('error in zoom meeting 285', e);
throwError({ errMsg: 'Something went wrong, Please try again.' });
}
});
} else {
throwError({errMsg: 'Meeting link not found'});
console.error('Meeting link not found');
/** Throw error */
}
} catch (e) {
console.error('error in zoom meeting 549', e);
throwError({errMsg: 'Something went wrong, Please try again.'});
/** Throw error */
}
});
ipcMain.on(‘zoom-entire_screen_2_share’, async (event, args)=>{
win.setAlwaysOnTop(false, ‘floating’);
await fireSendkeys(args.shortcut);
try {
await driver.findElement(By.name(‘Basic’)).click();
const handles = await driver.getAllWindowHandles();
console.log(‘handles’,handles);
// await driver.findElement(By.name(‘Second screen, share your second screen’)).click();
await driver.findElement(By.name(‘Share Screen 2’)).click();
win.setAlwaysOnTop(true, ‘floating’);
} catch (e) {
console.error(e);
win.setAlwaysOnTop(true, ‘floating’);
win.webContents.send(‘open-button’, { button: ‘share’ });
throwError({errMsg: ‘We are not able to detect this element, Please try again.’});
}
hideLoader();
});
this is my code and i am not able to share screens please help me in this