簡體   English   中英

使用遠程Webdriver在遠程計算機上打開html文件時顯示“找不到文件”

[英]opening a html file on remote machine using remote webdriver says “file not found”

我的測試在git中進行,我正在使用遠程Webdriver在網格上運行它們。 我必須在網格中打開靜態HTML。 為此,我在睾丸所在的git repo中簽入了HTML文件。 我在測試中有以下類似內容,可以打開文件(在我的本地計算機上可用)。

    public void openHtmlFile()  {
        String htmlFile=new TestHelper().getImportFile(TestConstants.OCI_HTML_FILE);
// Below gives exact path of the HTML file. Like when I am running it in my local, it gives exact path of the HTML file where it is kept in git repo in my local.
        log.info("Going to URL: " + htmlFile);
        Path sampleFile= Paths.get(htmlFile);
        driver.get(sampleFile.toUri().toString());
    }

當我在本地運行測試時,HTML文件可以正常打開,但在網格上顯示“找不到文件”。 這是在網格中打開的頁面的屏幕截圖。 在此處輸入圖片說明

它導航到URL,它是git工作空間中該文件的絕對路徑,因此很顯然,該節點不會找到該文件,因為它是一台不同的機器。 我該如何處理這種情況? 要添加更多詳細信息,我正在通過Jenkins運行測試,因此很明顯,我首先在Jenkins slave中克隆了git repo,然后進行了測試執行。 但是Jenkins從屬節點和網格節點是不同的機器,因此該文件未找到問題。

您需要了解使用網格運行和本地運行之間的區別。

1)在本地運行將涉及2台機器:
一種。 腳本機器(您的腳本放置在哪個機器上)
b。 瀏覽器機器(在運行過程中打開瀏覽器)

在這種情況下,兩台計算機是同一台計算機,這是您的本地計算機。

2)用網格運行將涉及3台機器:
一種。 腳本機
b。 瀏覽器機器
C。 網格服務器

在這種情況下,三台機器在大多數情況下是三台不同的機器。
當瀏覽器機器嘗試打開靜態html時,它只能從自身中找到靜態html文件,但是靜態html文件在瀏覽器機器上不存在,在腳本機上不存在。 所以不能打開。

關於網格的更多內容,硒網格由一個主節點和多個節點組成。

  1. 主機還調用網格服務器,它管理所有注冊的節點以根據您所需的能力查找並分配空閑節點。 (您永遠無法在運行之前知道將分配哪個節點,這由主節點決定。)

  2. 節點還調用瀏覽器機器,任何機器都可以注冊到主節點

  3. 在大多數情況下,即使主服務器允許這樣做,也不會將其本身注冊為節點。 因為我們希望主人只是要管理節點。 同時充當瀏覽器機器將影響其在主角色上的性能。

    即使您可以將本地計算機注冊為節點,但也無法始終控制master來將本地計算機分配給您(除非只有一個節點),因此在腳本和瀏覽器計算機時它也無法打開靜態html文件不是同一個人。

您應該在Jenkins從屬服務器上運行代碼,或者只是在實際交互之前將所需文件傳輸到目標計算機。

以前的方法僅需要進行詹金斯調整(代理設置+強制在新提出的從屬上執行作業)。

后一種方法更多地是關於一些專用工具或接口用法,用於在機器之間發送文件,例如scpsftprmi等。

您甚至可以為文件傳輸或遠程文件系統管理創建微服務。

我注意到我公司的jenkins作業具有“工作區”,該工作區將列出git中的所有文件夾/文件,每個文件都是一個以jenkins服務器地址為前綴的url鏈接,如果單擊它,則可以在使用http協議的瀏覽器中打開它。

我認為您可以修改測試腳本以從命令行接受頁面url,因此可以在jenkins作業配置中傳遞其值。

我的公司Jenkins Job的工作區屏幕截圖,單擊此處查看它的內容

以下是上圖中的Readme.md的網址:
https:// [ jenkins服務器地址] / cm2 / job / PI / job / PIY-PIT / job / DEV / job / PL000139 / job / PR104403 / job / Taxable-Equivalent%20Yields%20(AP002363)/ job / TEY %20Browser%20Test / ws / protractor-cucumber-tey / Readme.md

對於您的情況,您的靜態html文件將具有固定的url,您可以在命令行中對url進行硬編碼,或在下面的envirorment變量結合使用:

$ {JOB_URL} / ws / [靜態html文件的相對路徑從項目文件夾開始]
例如:$ {JOB_URL} /ws/protractor-cucumber-tey/Readme.md

JOB_URL是jenkins作業內置環境變量,jenkins將為您計算其值。

當在本地運行時,您可以將URL前綴與file://一起傳遞

代替user.dir系統屬性,我將文件存儲在resources文件夾下,並使用class.getResource()獲取文件路徑。 如果資源文件存儲在同一類中,這是最簡單的方法。

如果必須將其存儲在其他位置,則getResource()不知道如何將其傳遞回正確的類。 您必須將文件寫入系統的temp目錄,然后從那里讀取它。 這樣的事情(假設包含文件的類名為YourClass):

        Path tmpFile = Files.createTempFile(FilenameUtils.getBaseName(filename), "html");
        Files.copy(YourClass.class.getResourceAsStream(filename), tmpFile, StandardCopyOption.REPLACE_EXISTING);
        return tmpFile.toString();

這將在本地服務器和構建服務器中都起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM