QTP自传之web常用对象

随着科技的进步,“下载-安装-运行”这经典的三步曲已离我们远去。web应用的高速发展,改变了我们的思维和生活习惯,同时也使web方面的自动化测试越来越重要。今天,介绍一下我对web对象的识别,为以后的对象库编程打下基础。

Browser

Browser对象即浏览器对象,例如IE,FF,Chrome。Browser对象是所有web对象的父级对象,是金字塔的顶端,我在Description properties中对它也没有什么约束。使用Object Spy查看Browser对象

Properties中可以看到浏览器的相关属性,因为我现在测试的系统需要测试IE6的兼容性,大家看到我的IE版本还是6-_-! Operations列出了Browser对象可以使用的方法,下面介绍几个常用的方法(先将Browser对象加入对象库)。

1.SystemUtil.Run,打开浏览器,具体使用方式可以F1查看。

2.Sync,同步方法,意思是等待浏览器完全打开再进行下一步的操作。

3.Navigate,打开URL。

4.Close,关闭浏览器。

1 Systemutil.Run "iexplore.exe"
2 Browser("Browser").Sync
3 Browser("Browser").Navigate ("http://localhost/qtp/demo-login.php")
4 Browser("Browser").Close

 

tips:打开指定网址还可以用Systemutil.Run方法,上述代码可以简化为

1 Systemutil.Run "iexplore.exe","http://localhost/qtp/demo-login.php"
2 Browser("Browser").Close

 

Page

Page对象一般是Browser的子对象,每一个页面就是一个Page对象,Page对象的Name值是HTML标签中Title的值。Page对象的重要方法有Exist、Sync、Childobjects等。实际工作中对Browser和Page的操作很少,大多是一些打开关闭和同步的操作。

WebEdit

网页中的输入框可以被我识别为WebEdit对象,Operations里依然有很多方法,大家可以自行查看。

 1 <html>
 2     <head>
 3         <title>web对象演示</title>
 4         <meta http-equiv="Content-type" content="text/html" charset="utf-8">
 5         <style>
 6             .content{
 7                 width:260px;
 8                 height:30px;
 9             }
10             .edit{
11                 width:170px;
12             }
13             span{
14                 width:70px;
15             }
16         </style>
17     </head>
18     <body>
19         <form action="" method="POST">
20             <div class="content">
21                 <span>text</span><input type="text" name="web" class="edit">
22             </div>
23             <div class="content">
24                 <span>password</span><input type="password" name="web"  class="edit">
25             </div>
26              <div class="content">
27                 <span>textarea</span><textarea rows="5" cols="20" class="edit"></textarea>
28             </div>          
29         </form>
30     </body>
31 </html>

 

WebEdit中使用较多的set和GetROProperty方法,set用来设置输入框中的值,GetROProperty获取运行时对象的值。

Browser("web对象演示").Page("web对象演示").WebEdit("text").Set "111"Browser("web对象演示").Page("web对象演示").WebEdit("password").Set "222"Browser("web对象演示").Page("web对象演示").WebEdit("textarea").Set "333"a=Browser("web对象演示").Page("web对象演示").WebEdit("text").GetROProperty("value")b=Browser("web对象演示").Page("web对象演示").WebEdit("password").GetROProperty("value")c=Browser("web对象演示").Page("web对象演示").WebEdit("textarea").GetROProperty("value")msgbox "text="+a+";password="+b+";textarea="+c

 

运行后输出如下

Link

顾名思义,Link是网页中的链接,我们在刚才的网页中加入如下代码

<div class="content"><span>link</span><a href="http://www.baidu.com">点这里跳转到百度</a>
</div>

 

对Link对象的操作主要有Click、CheckProperty。CheckProperty方法是检查Link对象的url属性是否正确,click就是点击操作,运行下方代码,页面会自动跳转至百度。

'检查url属性是否正确
Browser("web对象演示").Page("web对象演示").Link("点这里跳转到百度")_
.CheckProperty "url","http://www.baidu.com/" 
'如果正确执行Click方法
If Reporter.RunStatus=Pass ThenBrowser("web对象演示").Page("web对象演示").Link("点这里跳转到百度").Click
End If

 

WebButton

WebButton对象就是页面中各式各样的按钮啦,主要操作就是Click:)

WebElement

WebElement主要是页面中的div,span,p等标签包涵的内容,一般用来验证数据的正确性,例如上面例子中的span标签。

If Browser("web对象演示").Page("web对象演示")_
.WebElement("password").GetROProperty("innerhtml")="password" thenmsgbox "ok"
end if

 

WebList

我将页面中的下拉框识别为WebList对象,在我们的演示网页中加入以下代码。

1 <div class="content">
2     <span>select</span>
3     <select>
4         <option value ="php">php</option>
5         <option value ="java">java</option>
6         <option value="vbs">vbs</option>
7         <option value="python">python</option>
8     </select>
9 </div> 

 

注意Properties中的all items属性,它包括了list中的所有选项,选择WebList中的选项用的是Select方法,用法和set方法一样。

WebRadioGroup && WebCheckBox

WebRadioGroup单选框对象,WebCheckBox复选框对象,加入如下代码。

 1 <div class="content">
 2     <span>radio</span>
 3     <input type="radio" name="sex" value="boy" checked="checked"> 4     <input type="radio" name="sex" value="girl"> 5 </div>
 6 <div class="content">
 7     <span>checkbox</span>
 8     <input type="checkbox" name="swim" value="swim" id="swim">游泳
 9     <input type="checkbox" name="game" value="game" id="game">游戏
10     <input type="checkbox" name="read" value="read" id="read">阅读
11 </div>

 


选择单选框和复选框的代码如下

Browser("web对象演示").Page("web对象演示").WebRadioGroup("sex").Select "girl"
Browser("web对象演示").Page("web对象演示").WebCheckBox("read").Set "ON"
Browser("web对象演示").Page("web对象演示").WebCheckBox("swim").Set "ON"

 

WebTable

WebTable对象是网页控件中的重点与难点,在网页布局中table一般用于数据的展示,这也是我们测试的重点所在。老样子,现在网页中创建table控件,加入以下代码。

<table><tr><td>text1</td><td>textarea1</td><td>sex1</td><td>hobby1</td></tr><tr><td>text2</td><td>textarea2</td><td>sex2</td><td>hobby2</td></tr><tr><td>text3</td><td>textarea3</td><td>sex3</td><td>hobby3</td></tr>
</table>

 

并在style标签中加入

table{  border: 1px solid black;  padding:0;   margin:0 auto;  border-collapse: collapse;  
}  td{  border: 1px solid black;   font-size:12px;  padding: 3px 3px 3px 8px;  color: black;  
}

 

从图中可以看到,我将td中识别为WebElement对象,将td的父级元素即table识别为WebTable对象。WebTable对象的方法有很多,这里列举几个常用的方法,参考下面的代码。

 1 '获取列数
 2 col=Browser("web对象演示").Page("web对象演示").WebTable("table").ColumnCount(1)
 3 '获取行数
 4 row=Browser("web对象演示").Page("web对象演示").WebTable("table").RowCount 
 5 '获取指定单元格的值
 6 info=Browser("web对象演示").Page("web对象演示").WebTable("table").GetCellData(1,1)
 7 '得到指定单元格内的测试对象的数目
 8 Dim obj
 9 obj=Browser("web对象演示").Page("web对象演示").WebTable("table").ChildItemCount(1,1,"WebEdit")
10 msgbox "列数="+CStr(col)+" 行数="+CStr(row)+" 第一行第一列="+info+_
11 ""+CStr(obj)+"个WebEdit对象"

 

运行结果如下

对于WebTable对象大部分情况下使用描述性编程,至于什么是描述性编程,那又是另一个故事了。

转载于:https://www.cnblogs.com/michaelle/p/4023304.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数

目录1、传引用2、vector使用初始化方法常用成员函数3、字符串string初始化方法常用成员函数4、哈希表 unordered_map初始化常用成员函数示例&#xff1a;计数器5、哈希集合 unordered_set初始化常用成员函数6、队列 queue初始化成员函数7、栈stack初始化常用成员函数7、emplace…

Linq list 排序,Dictionary 排序

C# 对List成员排序的简单方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客导航 http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 用一句Linq把一个集合的属性值根据条件改了&#xff0c;其他值不变 list去重 list.Where((x…

javascript Ajax 同步请求与异步请求的问题

先来看以下代码&#xff1a; var flagtrue; var index0; $.ajax({url: "http://www.baidu.com/",success: function(data){flagfalse;} }); while(flag){index; } alert(index); 请问最后alert的index的结果是多少&#xff1f; 可能有人会说0呗。实际上却没那么简单…

定义类的Python示例

The task to define a class in Python. 在Python中定义类的任务。 Here, we are defining a class named Number with an attribute num, initializing it with a value 123, then creating two objects N1 and N2 and finally, printing the objects memory locations and a…

十一、线性层

一、Linear Layers torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone) 以VGG神经网络为例&#xff0c;Linear Layers可以将特征图的大小进行变换由(1,1,4096)转换为(1,1,1000) 二、torch.nn.Linear实战 将CIFAR-10数据集中的测试集二维图像[6…

easyui plugin——etreegrid:CRUD Treegrid

昨天写了一个koeasyui的同样的实现&#xff0c;感觉写的太乱&#xff0c;用起来十分麻烦&#xff0c;于是今天照着edatagrid&#xff0c;写了一个etreegrid&#xff0c;这样再用ko绑定就方便多了。 使用很简单,$(tableId).etreegrid({idField:parentIdField:,treeField:,saveUr…

expr

expr在linux中 是一个功能非常强大的命令。通过学习做一个小小的总结。 1、计算字符串的长度。我们可以用awk中的length(s)进行计算。我们 也可以用echo中的echo ${#string}进行计算&#xff0c;当然也可以expr中的expr length $string 求出字符串的长度。举 例[rootlocalhost …

leetcode 42. 接雨水 思考分析(暴力、动态规划、双指针、单调栈)

目录题目思路暴力法动态规划双指针法单调栈题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组…

chdir函数_PHP chdir()函数与示例

chdir函数PHP chdir()函数 (PHP chdir() function) The full form of chdir is "Change Directory", the function chdir() is used to change the current working directory. chdir的完整形式是“更改目录” &#xff0c; 功能chdir()用于更改当前工作目录。 Synt…

十二、Sequential

一、Sequential介绍 torch.nn.Sequential(*args) 由官网给的Example可以大概了解到Sequential是将多层网络进行便捷整合&#xff0c;方便可视化以及简化网络复杂性 二、复现网络模型训练CIFAR-10数据集 这里面有个Hidden units隐藏单元其实就是连个线性层 把隐藏层全部展开整…

1064-快速排序

描述 给定输入排序元素数目n和相应的n个元素&#xff0c;写出程序&#xff0c;利用内排序算法中快速排序算法进行排序&#xff0c;并输出排序最后结果的相应序列。 输入 共两行&#xff0c;第一行给出排序元素数目n&#xff0c;第二行给出n个元素&#xff0c;1≤n≤100000&…

社交问答:取代BBS的Web2.0革命

编者按&#xff1a;本文由乐维UP创始人俞越撰写&#xff0c;你也可以点击这里关注俞越的新浪微博。 BBS在中国的兴起是在95年&#xff0c;之后以惊人的速度发展起来。从2011年开始&#xff0c;国内的问答社区也如当年的BBS一样&#xff0c;大量涌现快速成长&#xff0c;大体分为…

单调栈 leetcode整理(三)

目录42. 接雨水思路分析901. 股票价格跨度思路581. 最短无序连续子数组思路一&#xff1a;排序双指针思路二&#xff1a;单调栈思路三&#xff1a;双指针(最省时)42. 接雨水 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&…

python 抠图 锯齿_Python | 绘图中的抗锯齿

python 抠图 锯齿Antialiasing is another important feature of Matplotlib and in this article, we will review how to use this functionality. pyplot.antialiased() is an inbuilt function in matplotlib.pyplot which performs our required operation. 抗锯齿是Matpl…

apk 反编译

引用&#xff1a;http://code.google.com/p/dex2jar/issues/detail?id20 最新版:dex2jar http://code.google.com/p/dex2jar/downloads/list 错误&#xff1a;http://code.google.com/p/dex2jar/issues/detail?id20 这段时间在学Android应用开发&#xff0c;在想既然是用Jav…

OpenDiscussion_DataDrivenDesign

本文源于公司内部技术交流&#xff0c;如有不当之处&#xff0c;还请指正。 Content&#xff1a; 1. What is Data-driven design?2. WPF revolution.3. More about ObservableCollection.4. Question.1. What is Data-driven design?Data-driven design: is a design of usi…

十三、Loss Functions

一、Loss Functions损失函数 损失函数的作用&#xff1a; 1&#xff0c;损失函数就是实际输出值和目标值之间的差 2&#xff0c;由这个差便可以通过反向传播对之后的数据进行更新 Loss Functions官网给的API 里面由很多种损失函数&#xff0c;不同的损失函数有其不同的用途及表…

leetcode 滑动窗口小结 (一)

目录小结以及代码框架76. 最小覆盖子串滑动窗口代码以及注释567. 字符串的排列滑动窗口438. 找到字符串中所有字母异位词3. 无重复字符的最长子串化简框架reference小结以及代码框架 滑动窗口技巧属于双指针技巧。 该算法的思路为维护一个窗口&#xff0c;不断滑动&#xff0c…

linux命令行界面_Linux中的命令行界面

linux命令行界面If you are like most people, you are probably most familiar with using a Graphical User Interface (GUI) to control your computer. Introduced to the masses by Apple on the Macintosh computer and popularized by Microsoft, a GUI provides an eas…

一道小小面试题的细节分析

一道小小面试题的细节分析 今天突然想到以前遇到的一个问题&#xff0c;题目如下&#xff08;可能绝大多数人都遇到过&#xff09;&#xff1a; 1 class A2 {3 public A()4 {5 PrintFields();6 }7 public virtual void Pr…