#python-3.x #selenium-webdriver #azure-pipelines
Вопрос:
может быть, кто-нибудь может мне здесь помочь, потому что я совершенно схожу с ума и, честно говоря, понятия не имею, что я делаю не так.
Короче говоря, у меня есть код селена на python, первый шаг для этого селена-открыть веб-страницу входа в систему и ввести имя пользователя и пароль для входа.
Поскольку имя пользователя и пароль являются закрытыми, я использовал argparse
их для того, чтобы вводить эти значения из командной строки в конвейер.
Сценарий selenium выглядит следующим образом:
parser = argparse.ArgumentParser()
parser.add_argument("--USERNAMEOT", type=str)
parser.add_argument("--PASSWORDOT", type=str)
option = parser.parse_args()
USERNAMEOT = option.USERNAMEOT
PASSWORDOT = option.PASSWORDOT
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormUsername"))).send_keys(USERNAMEOT)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormPassword"))).send_keys(PASSWORDOT)
на моем локальном компьютере, если я подойду к терминалу и запущу код:
python script.py --USERNAMEOT username --PASSWORDOT password
Селен запускается, открывает страницу и вводит имя пользователя и пароль. Красиво, пока все так, как и ожидалось.
Теперь я хотел реализовать тот же логин в azure pipeline, чтобы я мог автоматизировать этот процесс без необходимости каждый раз делать это вручную.
поэтому я начинаю настраивать конвейер следующим образом
trigger: none
variables:
vmImageName: 'ubuntu-latest'
stages:
- stage:
jobs:
- job: Test1
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
addToPath: true
- script: |
python -m pip install --upgrade pip
pip install selenium
printenv
- task: Pythonscript@0
inputs:
scriptSource: 'filePath'
scriptPath: './script.py'
arguments: --USERNAMEOT $(USERNAMEOT) --PASSWORDOT $(PASSWORDOT)
- job: Test2
dependsOn: Test1
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
addToPath: true
- script: |
python -m pip install --upgrade pip
pip install selenium
- task: Pythonscript@0
inputs:
scriptSource: 'filePath'
scriptPath: './script1.py'
I set the arguments
in the selenium jobs, and configured those values in azure pipeline variables tab.
When the pipeline triggers, thanks to the printing
I can see the env variable set correctly.
In the job itself, it shows that the arguments has been passed correctly
/opt/hostedtoolcache/Python/3.9.5/x64/bin/python /home/vsts/work/1/s/script.py --USERNAMEOT username --PASSWORDOT 'password'
But after 30secs the code fails with the following error:
Traceback (most recent call last):
File "/home/vsts/work/1/s/script.py", line 47, in <module>
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormUsername"))).send_keys(USERNAMEOT)
File "/opt/hostedtoolcache/Python/3.9.5/x64/lib/python3.9/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Это происходит потому, что он не может найти имя пользователя, я полагаю, но локально у меня точно такая же конфигурация, и она работает просто отлично. Могу, пожалуйста, кого-нибудь пролить свет на этот вопрос, потому что я понятия не имею, где больше искать.