Selenium python 测试在 azure 管道上失败

时间:2021-07-27 09:22:24

标签: selenium azure-devops selenium-chromedriver azure-pipelines

我在这里遇到了一个我从未想过的问题,我已经尝试了所有可以在网上找到的建议来解决它,但它仍然存在。

我有一个 selenium(python0 脚本,可以打开我的网页,访问登录页面并输入用户名和密码以访问平台。

我的本​​地脚本如下所示:

PATH = "path to web driver chrome"
driver = webdriver.Chrome(PATH)
driver.maximize_window()
random_number = str(random.randint(1,500))
test = 'Test' + random_number
f = open('./config.json',)
data = json.load(f)

username = data['username']
password = data['password']
print(data)


# Website link to target. In our case we want cc outhink login page
driver.get("web-page-url")

wait = WebDriverWait(driver, 30)
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[local-name()='svg' and contains(@class, 'Card__OTSigninButton-sc')]"))).click()
time.sleep(20)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormUsername"))).send_keys(username)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormPassword"))).send_keys(password)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input[name='signInSubmitButton']"))).click()

我有一个 config.json,凭据如下

{
  "usernameot": "",
  "passwordot": ""
}

如果我在 config.json 中输入凭据并运行我的脚本,一切都会顺利运行,没有任何问题。现在我想将此工作流集成到一个 azure 管道中,以便能够一键自动执行此脚本,而不是每次都手动运行。

作为最佳实践的一部分,我决定使用 config.json 变量并在运行时用凭据覆盖其值,这样我就不必在 GitHub 上存储敏感数据。

这是我的管道:

trigger: none

variables:
  vmImageName: 'windows-latest'

stages:
  - stage:
    jobs:
      - job: Configuration
        steps:
          - task: PowerShell@2
            displayName: "Set Configuration"
            inputs:
              targetType: "inline"
              script: |
                #read config
                $config = Get-Content (Get-Item .\config.json) -Raw -Encoding UTF8 | ConvertFrom-Json

                #set the credentials
                $config.usernameot = $(username)
                $config.passwordot = $(password)

                #update the file
                $config | ConvertTo-Json | Set-Content .\config.json
          - task: PowerShell@2
            displayName: "Check Configurations"
            inputs:
              targetType: "inline"
              script: |
                #debug
                dir
                cat config.json

          - task: UsePythonVersion@0
            inputs:
              versionSpec: '3.8'
              addToPath: true
          - script: |
              python -m pip install --upgrade pip
              pip install selenium
              printenv
          - task: Pythonscript@0
            inputs:
              scriptSource: 'filePath'
              scriptPath: './test1.py'


      - job: Mailinator
        dependsOn: Configuration
        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: './test2.py'

在管道和 python 脚本中,我都有一些调试 print 来检查我的变量的状态。

这里发生了什么。

在 azure devOps 中,我设置了变量。我运行管道。在第一个测试中,我可以在输出中看到变量已成功填充。

说到python脚本,输出很奇怪。因此:

它打开 url 的网络驱动程序(所以我认为这不是浏览器配置错误),但它在用户名 input 上超时。

在我的 python 脚本中,我有一个 print(data) 并且我能够看到正确的凭据,但由于某种原因 python 无法检索它并将其用作用户名。

这是否曾发生在任何人身上,也许可以帮助我理解为什么会发生此错误?

我出于沮丧而进行的另一个测试是将用户名直接传递给脚本。仍然出现同样的错误,我在想可能浏览器没有找到用户名字段。

0 个答案:

没有答案