2016-09-19 14 views
1

を引数パーサを使用して、私はテストを実行するために管理し、それが渡された、しかし、今、私は私が与えることができるように、引数パーサを追加したいです異なるURLを引数としてテストします。私は、引数がセレンクラス内で定義されるように取得できますかは、私のpythonを使用してセレンでテストを書くことをしようとしている別のクラスでは、Pythonで</p> <p>を

app_url= (args['base_url']) 
NameError: global name 'args' is not defined 

:私はエラーを取得する引数を渡しているとき

事はそう、私のテストがクラス内にあるということです ?

これは私のコードです:それは常に作成されますが、評価されないますように

from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import NoAlertPresentException 
from selenium import webdriver 
import unittest, time, re 
import os 
import string 
import random 
import argparse 


def id_generator(size=6, chars=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(8)) 
agmuser = id_generator() 

class Selenium(unittest.TestCase): 
    def setUp(self): 
     chromedriver = "c:\chromedriver.exe" 
     os.environ["webdriver.chrome.driver"] = chromedriver 
     self.driver = webdriver.Chrome(chromedriver) 
     app_url = (args['base_url']) 
     #app_url= "http://myd-vm16635.fufu.net:8080/" 
     print "this is the APP URL:" + ' ' + app_url 
     self.base_url = app_url 
     self.verificationErrors = [] 
     self.accept_next_alert = True 

def test_selenium(self): 

    #id_generator.user = id_generator() 
    driver = self.driver 
    driver.get(self.base_url + "portal/") 
    driver.find_element_by_css_selector("span").click() 
    driver.find_element_by_id("j_loginName").clear() 
    driver.find_element_by_id("j_loginName").send_keys(agmuser) 
    driver.find_element_by_id("btnSubmit").click() 
    driver.find_element_by_link_text("Login as" + ' ' + agmuser).click() 
    driver.find_element_by_css_selector("#mock-portal-Horizon > span").click() 
    # driver.find_element_by_id("gwt-debug-new-features-cancel-button").click() 
    # driver.find_element_by_xpath("//table[@id='gwt-debug-module-dropdown']/tbody/tr[2]/td[2]").click() 
    # driver.find_element_by_id("gwt-debug-menu-item-release-management").click() 

def is_element_present(self, how, what): 
    try: self.driver.find_element(by=how, value=what) 
    except NoSuchElementException as e: return False 
    return True 

def is_alert_present(self): 
    try: self.driver.switch_to_alert() 
    except NoAlertPresentException as e: return False 
    return True 

def close_alert_and_get_its_text(self): 
    try: 
     alert = self.driver.switch_to_alert() 
     alert_text = alert.text 
     if self.accept_next_alert: 
      alert.accept() 
     else: 
      alert.dismiss() 
     return alert_text 
    finally: self.accept_next_alert = True 

def tearDown(self): 
    self.driver.quit() 
    self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    #####################******SCRIPT PARAMS****;**################################### 
    # these values can be changed type 'python selenium_job.py --help' for assistance 
    ################################################################################## 
    parser = argparse.ArgumentParser(description='DevOps team - Sanity test') 
    parser.add_argument('-b', '--base_url', help='base_url', default="http://myd-vm16635.fufu.net:8080/") 
    args = vars(parser.parse_args()) 
    unittest.main() 
+0

あなたの操作を行い、

def get_parsed_args(): parser = argparse.ArgumentParser(...) parser.add_argument(...) # etc. args = parser.parse_args() return args # or just... return parser.parse_args() #and then call that in the main program: if __name__ == '__main__': args = get_parsed_args() # etc. 

そして、あなたがにそれをインポートする他のスクリプトでインデントがオフです。それらのすべての 'def ...(self)'はクラスの一部であるようにインデントされるべきです - そうですか? – hpaulj

+0

このスクリプトを直接呼び出していますか。間接的にはいくつかの 'unittest'ツールを使っていますか?診断として、私はそのクラスのセットアップ中に 'print sys.argv'を追加することをお勧めします。あなたの 'main'ブロックに' args'の印字があるかもしれません。 – hpaulj

答えて

0

if __name__ == "__main__":parser = argparse.ArgumentParser(...)parser.add_argument()を置きます。 __main__の内部にargs = vars(parser.parse_args())を保管してください。

こうすれば、from selenium_tests import parserのようなファイルからインポートしてから別のスクリプトにインポートすることができます。parser.parse_args()

そして、それを行うにはクリーンな方法は次のように、パーサを返す関数を作成することです:

from selenium_tests import get_parsed_args 

if __name__ == '__main__': 
    args = get_parsed_args() 
    # etc. 
+0

答えをありがとう、しかし、私はまだ同じエラーを取得した後パーザ= argparse.ArgumentParser(...)とparser.add_argument()外に__name__ == "__main__":と保持args = vars(parser.parse_args ())を__main__の中に入れます。 –

+0

なぜあなたは 'vars()'を使っていますか?単に 'args = parser.parse_args()'を使用してください。パーサの代わりに 'args'を返すように編集を参照してください。 – aneroid

関連する問題

 関連する問題