olaygood 发表于 2014-10-10 17:29:23

Selenium2 WebDriver 定位不到div模拟的 弹出对话框?

本帖最后由 olaygood 于 2014-10-10 17:30 编辑

弹出框是div模拟的    提前谢谢大神

授客 发表于 2014-10-11 20:22:28

有兴趣的话看看我的共享的相关资料吧

axue12 发表于 2014-10-28 14:27:35

问下楼主解决了吗?我也碰到这方面的问题了

cyli.chan 发表于 2014-12-12 17:56:02

不知道你的具体问题,给你全部的定位方法,你自己看看吧,css和XPath应该可以。
:lol

(1)验证页面元素:
verifyTextPresent:
验证页面是否有特定文本,不关心其所在位置;

verifyText:
验证页面的某个位置(Target),是否存在某特定文本;(选择XPath、DOM)

verifyElementPresent:
测试特定UI元素是否存在某位置,不关心其内容;仅检查HTML tag;


(2)定位页面元素:
locatorType=location,locatorType可以省略;
定位器以document开始,使用DOM定位策略;
定位器以//开始,使用XPath定位策略;
定位器没有以locatorType开头,默认使用identifier定位策略;

identifier定位:
默认为identifier定位,识别第一个使用指定id的页面元素,若没有,则识别第一个名字与指定条件相符的元素;

id定位:
比identifier定位范围更窄,更具体,需要知道元素的id特征;

name定位:
识别第一个匹配名称属性的UI元素,如果同名,使用过滤器(默认Value);

--!!!以上3种定位器使selenium不需要依赖UI元素在页面上的位置来进行测试。

XPath定位:
在XML文档中定位元素,扩展了id和name定位,比如定位页面上的第3个多选框;
用相对于有id和name的元素的相对地址来定位较好,绝对XPath包含从root(/html)开始的路径,不利于复用;
XPath定位以“//”开始,xpath的标签并非是必需的;
例如://form[@id='loginForm']/input——id为‘loginForm’的form,定位它的第4个input元素。
在FireFox中添加XPath Checker、FireBug附加组件;

通过链接文字定位超链接Link:
例如:link=Continue(4)——定位页面元素连接文字为Continue。

DOM定位:
document object model使用JavaScript评估元素,用分级符号来简化元素定位;
只有dom定位以document开始,所以“dom=”标签不是必需的;
例如:
dom=document.getElementById('loginForm')(3)——定位页面元素form;
dom=document.forms(3)——定位页面元素form;
document.forms.elements(7)——定位continue,它是form的第三个元素;

CSS定位:
cascading style sheet表现HTML和XML,使用选择器来为页面元素绑定式样属性,可被selenium用作定位策略;
例如:
css=form#loginForm(3)——定位页面元素form;
css=input(4)——定位页面元素username;
css=#loginForm input(4)——定位页面元素,类型为button;
css=#loginForm input:nth-child(2)(5)——定位页面元素,且它的form第二个input子元素;
http://www.w3.org/TR/css3-selectors/


(3)文字范本匹配
patterns也是经常被selense命令使用的参数,需要范本的命令包括verifyTextPrstesent,verifyTitle,assertConfirmation,verifyText,verifyPrompt,链接定位器,允许使用特殊字符来描述期望值,有3种类型的范本:globbing、regular expression、Exact。

globbing范本:
在dos或linux系统中作为文件名通配符(*.c),在selenium中,只支持2种特殊符号:
* ——匹配任何东西;
[]——(字符集)匹配任何方括号内的字符,连接符可以被用来缩短穷举字符(ASCII内连续);
例如:
——匹配任何小写元音字母;
——匹配任何数字;
——匹配任何字母和数字;
在selenese命令中使用globbing范本,可以加“glob:”前缀,不加也行,因为glob是默认范本;
例如:
Click                link=glob:Film*Television Department
VerifyTitle        glob:*Film*Television*

regular expressions范本(正则表达式):
功能最强大的,被多种高级语言支持;
例如:
要确保特定表格单元中仅包含有数字,regexp:+ ——是一个简单范本,可以匹配任何长度的十进制数。
支持JavaScript的所有特殊字符;如下:
.        任何字符                        -anyAll
[]        字符集,匹配括号中的任何字符        -charClass       
*        0个或更多之前描述的字符或字符串        -quantifier        (.*表示0个或多个任意字符)
+        0个或更多之前描述的字符或字符串        -quantifier
?        0个或1个之前描述的字符或字符串        -quantifier
{1,5}        1个或者5个之前描述的字符或字符串-quantifier
|        左边或右边的字符或字符串        -alternation
()        一个整体,与上述结合使用                -grouping
在selenese中,regular expression范本需要加上“regexp:”或者“regexpi:”前缀,后一种大小写不敏感;
+        :表示没有或者有a-z的字符;
?                :表示没有或者有1个0-6的数字;
|        :表示左边是数字,右边是字母;
[已未]完成        :表示已完成或者未完成;

例如:
通配——
click                link=regexp:Film.*Television Department (与glob的*效果一样)
veriyTitle        regexp:.*Film.*Television.*
复杂的——
open                        http://weather.yahoo.com/forecast/USAK0012.html
verifyTextPresent        regexp:Sunrise: *{1,2}:{2} m
说明:
Sunrise: *        Sunrise后跟着0个或多个空格;
{1,2}        1个或者2个0-9的数字(小时);
:                字符:
{2}        2个0-9的数字跟着一个空格;
m                a或者p跟着m;


Exact范本:
很少被使用,完全不使用特殊字符,所以如果需要找到真实的星号字符,就可以使用它了;
例如:
在下拉框选择“Real *”,应该使用“exact:”前缀创建范本,exact:Real * 即可;
select                //select        exact:Real * (regexp:Real \* --转义后也一样)

chengyan_song 发表于 2015-7-21 11:50:11

问下楼主解决了吗?我也碰到这方面的问题了,求教。

winnerpdc 发表于 2015-8-27 16:20:50

应该是在不同的frame中了,driver.switchTo().frame(name或id),然后再定位试试

winnerpdc 发表于 2015-8-27 16:21:04

应该是在不同的frame中了,driver.switchTo().frame(name或id),然后再定位试试

winnerpdc 发表于 2015-8-27 16:22:05

axue12 发表于 2014-10-28 14:27
问下楼主解决了吗?我也碰到这方面的问题了

注意是不是在不同的frame中
页: [1]
查看完整版本: Selenium2 WebDriver 定位不到div模拟的 弹出对话框?