TestComplete with Python - Python runtime error. NameError: name 'page' is not defined

TestComplete with Python - Python runtime error. NameError: name 'page' is not defined

我是 python 的新手,测试完成只是想自动化一个示例网页,但遇到以下错误。 我已经搜索并知道我在定义变量时肯定会犯错误。 已经记录了下面的脚本,如果我保留它一个函数它运行良好但是当我将它保留在单独的函数中时(登录页面将代码保留在 Login() 函数中并在 Test1() 中调用它)它失败但登录进入页面。


global browser,page
def Login():
  Browsers.Item[btChrome].Navigate("http://secure.smartbearsoftware.com/samples/testcomplete11/WebOrders/login.aspx")
  browser=Aliases.browser
  page = browser.pageWebOrdersLogin
  form = page.formAspnetform
  form.textboxUsername.Keys("[Enter]")
  page.Wait()
  textbox = form.textboxUsername2
  textbox.SetText("Tester")
  textbox.Keys("[Tab]")
  passwordBox = form.passwordboxPassword
  passwordBox.SetText(Project.Variables.Password1)
  passwordBox.Keys("[Enter]")  
  page = browser.pageDefault
  page.Wait()
  

def Test1():
  global page
  Login()    
  page.formAspnetform.link.Click()
  page = browser.pageProcess
  page.Wait()
  form = page.formAspnetform
  form.selectProduct.ClickItem("FamilyAlbum")
  textbox = form.textboxQuantity
  textbox.SetText("40")
  form.submitbuttonCalculate.ClickButton()
  textbox = form.textboxCustomerName
  textbox.SetText("nitin")
  textbox.Keys("[Tab]")
  textbox = form.textboxStreet
  textbox.SetText("marvel")
  textbox.Keys("[Tab]")
  textbox = form.textboxCity
  textbox.SetText("pune")
  textbox.Keys("[Tab]")
  textbox = form.textboxState
  textbox.SetText("maharashta")
  textbox.Keys("[Tab]")
  form.textboxZip.SetText("411014")
  cell = form.cell
  cell.radiobuttonVisa.ClickButton()
  textbox = form.textboxCardNr
  textbox.SetText("411882781991")
  textbox = form.textboxExpireDateMmYy
  textbox.SetText("01/23")
  form.linkInsertbutton.Click()
  page.Wait()
  textNode = page.textnode
  aqObject.CheckProperty(textNode, "contentText", cmpEqual, "New order has been successfully added.")
  page.link.Click()
  browser.pageDefault2.Wait()

错误: Python 运行时错误。

NameError: 名称 'page' 未定义

错误位置: 单位:“WebTesting\WebTesting\Script\WebTest” 行:22 列:1.

pageglobal 声明需要在 def Login 中重复;但更好的设计是在这些函数之间传递非全局变量。要么

def login():
    browser = ...
    page = ...
    ...
    return browser, page

def test1():
    browser, page = login()
    ...

或者反过来让调用者定义并传递这些;

def login(browser, page):
    ...

def test1()
    browser = ...
    page = ...
    login(browser, page)
    ...

您当前的设计要求前者,但这两种模式都很常见,而第二种模式可能更合乎逻辑。通常,尝试在将要使用它们的上下文中定义变量,然后根据需要将它们传递给其他函数。根据经验,尽量使您的变量的范围尽可能窄且寿命短。

另请注意,在 Python.

中,我们通常不将函数名称大写