【问题标题】:TestComplete with Python - Python runtime error. NameError: name 'page' is not definedTestComplete 与 Python - Python 运行时错误。 NameError:名称“页面”未定义
【发布时间】:2020-06-26 07:13:57
【问题描述】:

我是 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:名称“页面”未定义

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

【问题讨论】:

  • 你为什么还要使用global 变量呢?正确的设计几乎总是向def 添加一个参数,以允许您从不同的上下文中传递一个变量。
  • 能否请您更改代码,我将尝试分析。
  • 无论如何,第一个def 中的page 也需要为global 才能引用同一个变量。这应该可以轻松解决眼前的问题。
  • 在两个函数中都添加了全局页面、浏览器时有效

标签: python testcomplete


【解决方案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 中不将函数名大写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多