首页 > 解决方案 > 从unix机器识别windows selenium节点中下载的文件

问题描述

我的 selenium 代码部署在 jenkinns 中,它位于 unix 机器中。当我的调度程序触发一个作业套件时,作业将在 Windows 中的 selenium 节点上运行。Gere,我有一个测试用例,文件在其中一个节点中下载,我需要验证下载的文件。

如何从 unix 机器识别 Windows 中下载的文件(两者都是不同的环境)。

标签: javaseleniumselenium-webdriverselenium-chromedriverselenium-grid

解决方案


如果您想在 chrome 上验证这一点,下面的代码是一个解决方案。

注意:它写在打字稿上,所以你必须适应它。

function checkChromeForDownloadedFile(fileName: string, state: string = 'COMPLETE') {
    // open new tab
    await browser.executeScript('return window.open()');

    // switch to downloads tab window
    let tabs: string[] = await browser.getAllWindowHandles();
    await browser.switchTo().window(tabs[1]);

    // open downloads page
    await browser.get('chrome://downloads');

    // 1 sec delay.
    await browser.sleep(1000);

    let downloadedItems;

    try {
        await browser.wait(() => {
            // fetch downloaded items 
            return browser.executeScript('return downloads.Manager.get().items_').then((result) => {
                downloadedItems = result;
                if (!downloadedItems) {
                    return false;
                }
                // search for downloaded file with state complete and filename
                return downloadedItems.some(i => i.file_name === fileName && i.state === state.toUpperCase());
            }).catch( () => {
                return false;
            });
        }, 10000, `File ${fileName} with download sate ${state} was not found within 10 seconds`);
    } catch (error) {
        console.log('there was an error while trying to fetch downloaded files');
        throw error;
    }


    // close the tab
    await browser.close();


    // switch back to original window
    await browser.switchTo().window(tabs[0]);
}

推荐阅读