Web页面标识¶
基础页面标识¶
在在QT4W中,每个页面都被表示成WebPage类,该WebPage类是实际页面的抽象。在自动化中可能被操作的元素,在该类中应该都有所标识。在封装某个页面的WebPage时,一般会直接继承QT4W的WebPage的实现,不必再关心page页面的底层接口的实现,只需关注page页面自身的操作逻辑的实现。下面以封装QT4W提供的Demo页面为例来说明如何封装自己的Webpage:
class DemoPage(WebPage):
'''Demo页面
'''
ui_map = {'title':{'type': WebElement,'locator': XPath('//div[@class="panel-heading"]')},
'name':{'type': InputElement,'locator':XPath('//input[@id="name"]')},
'female':{'type': WebElement,'locator':XPath('//input[@value="female"]')},
'male':{'type': WebElement,'locator':XPath('//input[@value="male"]')},
'age':{'type': SelectElement,'locator':XPath('//select[@id="age"]')},
'company':{'type': InputElement,'locator':XPath('//input[@id="company"]')},
'submit':{'type': WebElement,'locator':XPath('//button[@id="submit"]')},
}
#设置姓名
def set_name(self,name):
self.control('name').value=name
#设置性别为女
def set_female(self):
self.control('female').click();
#设置性别为男
def set_male(self):
self.control('male').click();
#设置姓名
def set_age(self,age):
self.control('age').selection=age
#设置公司名
def set_company(self,company):
self.control('company').value=company
def submit(self):
self.control("submit").click()
在封装WebPage主要是包括两部分内容: 其一、是构建Web页面的ui_map,页面的ui_map中存放的是所有在自动化中可能操作的元素控件。至于如何封装页面控件参考*WebElement封装*,这里给出关于封装页面元素的几条建议:
- 封装页面元素要尽可能简洁,Xpath尽可能简短。
- 合理的使用层次结构封装,当某个控件的子控件大部分会被使用时建议层次结构封装,例如上述示例中的menu封装,即先封装父控件,在父控件的UIMap中封装子控件,这样可以减少维护成本,结构清晰。但是只用到极少的子控件时,不建议这样封装。
- 封装控件时,除非不得已的情况下不要使用[N]来选取第N个元素。 其二、封装页面相关操作,这里主要是封装一些页面内的一些简单的UI操作或者一些UI操作的集合,来完成某个常用的行为,例如这里的登录操作,搜索操作等,这里的操作只能是本页面内的。
内嵌页面标识¶
对于内嵌页面封装也会继承QT4W的WebPage类,同样需要封装页面ui_map的以及页面操作。只是对于内嵌页面,没有进行Browser封装,需要在WebPage初始化时传入WebView对象,因此必须要重写WebPage的__init__()方法。下面给出一个内嵌页面的封装示例:
class DemoEmbedPage(WebPage):
def __init__(window):
#获取页面的WebView对象
webview=WebView(window)
super(DemoEmbedPage,self).__init__(webview)
ui_map={'最热':{'type':WebElement,
'locator':XPath('//div[@class="filter_item"]/a[@_stat="pages_index:sort_sort_最热"]')
},
}
self.update_ui_map(ui_map)
获取WebPage对象¶
在使用浏览器打开某个页面时,可以直接返回指定的WebPage对象,如下所示:
#指定浏览器
browser = Browser("Chrome")
#打开网页,返回指定的WebPage页
page = browser.open_url('https://qtacore.github.io/qt4w/demo.html', DemoPage)
这里需要指出的是,在使用Browser(“browsername”)获取浏览器对象时,需要先使用register_browser()注册一下,才能使用,此处注册一次即可,具体用法参见跨端跨平台测试。此外,还可以使用browser.find_by_url(url,DemoPage),用来返回指定的Page页面。对于内嵌页面的WebPage对象,和普通对象个获取方式相同,可以直接初始化出来。示例如下:
page=DemoEmbedPage(window)
获取到Page对象后就能够对页面进行的一些列操作,这些操作大概也可以分为以下几个类型: 1.基本属性的定义及操作,包括页面的URl、Title、ReadyState、cookie等; 2.页面滑动操作; 3.查找元素:find_element和find_elements; 4.其他操作:执行JS接口(eavl_script)、激活窗口activate()以及upload_file()等。 详细的操作接口参见WebPage定义*QT4W接口文档*