0

I'm trying to pass some variables via command line to a pytest script to run with selenium. I can't figure out how to insert the "profile" variable, unfortunately I'm a goat in python.

This is my conftest.py


def pytest_addoption(parser):
    parser.addoption("--profilo", action="store", help="input profilo")
    parser.addoption("--indirizzo", action="store", help="input indirizzo")
    parser.addoption("--messaggio", action="store", help="input messaggio")
    parser.addoption("--messaggio2", action="store", help="input messaggio2")
    parser.addoption("--messaggio4", action="store", help="input messaggio4")
    parser.addoption("--gruppo", action="store", help="input gruppo")
    parser.addoption("--pagina", action="store", help="input pagina")
    parser.addoption("--pagina2", action="store", help="input pagina2")
    parser.addoption("--pagina3", action="store", help="input pagina3")
    parser.addoption("--saveas", action="store", help="input saveas")

@pytest.fixture
def params(request):
    params = {}
    params['profilo'] = request.config.getoption('--profilo')
    params['indirizzo'] = request.config.getoption('--indirizzo')
    params['messaggio'] = request.config.getoption('--messaggio')
    params['messaggio2'] = request.config.getoption('--messaggio2')
    params['messaggio4'] = request.config.getoption('--messaggio4')
    params['gruppo'] = request.config.getoption('--gruppo')
    params['pagina'] = request.config.getoption('--pagina')
    params['pagina2'] = request.config.getoption('--pagina2')
    params['pagina3'] = request.config.getoption('--pagina3')
    params['saveas'] = request.config.getoption('--saveas')

    return params

and this is test.py

#!/usr/local/bin/python3

import pytest
import time
import sys
import os
import subprocess

from time import sleep
from selenium import webdriver
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class TestUntitled():
  def setup_method(self, method):
    profile_path = '/root/.mozilla/firefox/' + params['profilo']
    options = Options()
    options.add_argument('-profile')
    options.add_argument(profile_path)

    service = Service('/usr/local/bin/geckodriver', log_path='/dev/null')
    self.driver = Firefox(service=service, options=options)
    self.vars = {}

  def teardown_method(self, method):
    self.driver.quit()

  def test_untitled(self, params):
    self.driver.maximize_window()
    self.driver.get(params['indirizzo'])
    sleep(10)

    self.driver.close()
    self.driver.quit()

I run script with:

pytest test.py --profilo "FirstProfile" --indirizzo "https://www.google.com"

and this is error:

ERROR ../usr/local/bin/grab/test.py::TestUntitled::test_untitled - NameError: name 'params' is not defined

I tried changing "def setup_method(self, method)" to "def setup_method(self, method, params)" and have this error:

TypeError: setup_method() missing 1 required positional argument: 'params'

eliafino
  • 96
  • 8

0 Answers0