Aici este fișierul meu Docker.
DIN nodul:17.2.0
rădăcină UTILIZATOR
WORKDIR /LT
RUN apt-get update
RUN apt-get install git --yes
COPIE /LT .
COPIE /LT/test .
COPIEAZĂ ["/LT/package.json", "."]
# Instalați Google Chrome
RUN apt-get install wget
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get install ./google-chrome*.deb --yes
ENV CHROME_BIN=/usr/bin/google-chrome
RUN instalarea npm
RUN npm ci
RUN npm install nodejs
RUN npm install mocha -g
RUN npm install chromedriver -g --unsafe-perm
RUN npm instalează selenium-webdriver
RUN npm install webdriver-manager
#RUN actualizare webdriver-manager
CMD [„nod”, „./test/script1.js”]
Urmează fișierul meu javascript nodejs care folosește Chrome pentru a lansa aplicația și a se autentifica.
require("chromedriver");
const {By,Key,Builder} = require("selenium-webdriver");
const chrome = require('selenium-webdriver/chrome');
funcția asincronă getAuthCode(){
const url = "https://abcd.com";
//Pentru a aștepta ca browserul să se creeze și să se lanseze corect
lasă driverul = așteaptă noul Builder()
.forBrowser(„chrome”)
.setChromeOptions(new chrome.Options().headless())
//.setChromeOptions(new chrome.Options().addArguments(['--no-sandbox','-headless', '--disable-dev-shm-usage']))
.construi();
așteaptă driver.get(url);
console.log(driver);
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
așteptați așteptați (1 * 20 * 1000);
așteaptă driver.manage().window().setRect({ lățime: 1552, înălțime: 840});
așteaptă driver.findElement(By.id("emailInput")).click();
await driver.findElement(By.id("emailInput")).sendKeys("[email protected]");
await driver.findElement(By.id("submitbutton")).click();
așteptați așteptați (1 * 20 * 1000);
așteaptă driver.quit();
returnează „unele date”;
}
funcția asincronă testAuthCode()
{
var cCode = await getAuthCode();
console.log(cCode);
}
testAuthCode();
Când rulez fișierul meu de scriere docker folosind același fișier docker care este prezentat mai sus, primesc următoarea eroare.
WebDriverError: eroare necunoscută: Chrome nu a pornit: ieșit anormal.
-nodejs-1 | (eroare necunoscută: fișierul DevToolsActivePort nu există)
-nodejs-1 | (Procesul început din locația Chrome /usr/bin/google-chrome nu mai rulează, așa că ChromeDriver presupune că Chrome s-a blocat.)
-nodejs-1 | la Object.throwDecodedError (/LT/node_modules/selenium-webdriver/lib/error.js:539:15)
Știu motivul, nu poate găsi chromedriver-ul la calea implicită „/usr/bin/google-chrome”.
Fie
- Trebuie să instalez Chrome în locația implicită dată
Sau
- dați calea locației în care este instalat de fapt Chrome.
În ambele cazuri, cum o fac în JavaScript sau în docker?
PS: Scriptul rulează perfect în mediul meu local Windows.