概念
Selenium通过命令进行驱动。Selenium可归纳为三种“风格”:动作、辅助和断言。每一个命令调用就是下表中的一行。
动作(Actions)命令一般用于操作应用程序的状态。它们通过如”点击链接”和”选择选项”的方式进行工作。如果一个动作执行失败,或是有错误,当前的测试将会停止执行。
许多动作可以被包含后缀”并等待”的方式进行调用,例如,”点击并等待”。这个后缀告知Selenium,该命令将使浏览器向服务器产生一个请求,并使得Selenium等待加载一个新的页面。
辅助(Accessors)用于检查应用程序的状态并将结果存储在变量中。例如”storeTitle”。它们同样可用于自动生成断言。
断言(Assertions)类似于辅助,但它们可以验证应用程序的状态是否同所期望的相一致。例如包括”确认页面标题为X”和”验证该复选框是否被勾选”。
所有的Selenium断言可以被用于三种模式:”assert”, “verify”,和”waitfor”。例如,你可以”assertText”,”verifyText”,及”waitforText”。当”assert”失败时,该测试将终止。当”verify”失败时,该测试将继续执行,并将错误记入日志。这就允许了通过单条”assert”确保应用程序在正确的页面上,而通过一系列的”verify”断言测试表单上的区域值,标签等。
“waitfor”命令用于等待某些条件变为真(可用于Ajax应用程序的测试)。如果该条件已经为真,他们将立即成功执行。反之,如果该条件不为真,则将失败并暂停测试,直到超过当前所设定的超时时间(参照后面的setTimeout动作)。
元素定位器(Element Locators)告诉Selenium是向HTML中的哪一个元素发送命令。许多命令需要一个如”target”属性的元素定位器。这其中包括”elementId”和”document. forms[0].element”。在接下来的部分将更详细的描述它们。
式样(Patterns)由于多种因素被使用着,如指定一个输入域的期望值,或识别一个选择选项。Selenium支持许多类型的式样,其中包括正则表达式,所有这些将在接下来的章节中进行更详细的描述。
定义一个类用于运行Selenium命令。
元素定位器(Element Locators)
元素定位器(Element Locators)告诉Selenium是向HTML中的哪一个元素发送命令。一个定位器的格式如下:
locatorType = argument
我们支持如下写法用于定位元素:
·identifier=id:根据指定的@id属性选择元素。如果没有匹配的值,则选择第一个@name属性为id的元素。(参照后面)
·id=id:根据指定的@id属性选择元素。
·name=name:选择第一个根据指定的@name所查找到的元素。
〇 username
〇 name=username
这里的name可以作为可选项跟在一个或多个元素过滤器的后面,通过空格进行分隔。如果没有指定过滤类型,则假定为value。
〇 name=flavour value=chocolate
·dom=javascriptExpression:通过检测指定字符串查找元素。这使得你可以通过JavaScript贯穿HTML文档对象。注意在这个字符串中返回值不是必须的;仅仅只需要确保这条语句是你块中的最后一条。
〇 dom=document.forms[′myForm′].myDropdown
〇 dom=document.images[56]
〇 dom=function foo() { return document.links[1];}; foo();
·xpath=xpathExpression:通过XPath表达式定位元素。
〇 xpath=//img[@alt=′The image alt text′]
〇 xpath=//table[@id=′table1′]//tr[4]/td[2]
〇 xpath=//a[contains(@href,′#id1′)]
〇 xpath=//a[contains(@href,′#id1′)]/@class
〇 xpath=(//table[@class=′stylee′])//th[text()=′theHeaderText′]/../td
〇 xpath=//input[@name=′name2′and @value=′yes′]
〇 xpath=//*[text()=″right″]
·link=textPattern:选择所包含的文字匹配指定式样的链接(锚)。
〇 link=The link text
·css=cssSelectorSyntax:通过css选择器选择元素。请查询CSS2选择器,CSS3选择器以获得更多信息。在下载下来的selenium core package中的selenium test suite里的TestCssLocators test ,你同样可以查看到使用例子。
〇 css=a[href=″#id3″]
〇 css=span#firstChid + span
当前css选择过滤器支持所有的css1,css2,css3,除了css3中一些虚拟类(:nth-of-type,:nth-last-of-type,:first-of-type,:last-of-type,:only-of-type,:visited,:hover,:active,:focus,:indeterminate)以及虚拟元素(::first-line,::first-letter,::selection,::before,::after)。
如果没有一个显式的前缀,Selenium使用以下默认写法:
·dom,用于开头为″document.″的定位器
·xpath,用于开头为″//″的定位器
·identifier,其他
元素过滤器(Element Filters)
元素过滤器可以同选择器一起使用,从一堆候选元素中进行筛选。它们当前仅使用于’name’元素选择器。
过滤器看起来更像是选择器,也就是:
filterType=argument
所支持的元素过滤器为:
value=valuePattern
匹配元素时基于它们的值进行匹配。这在对一堆相似命名的关联按钮的筛选中显得尤其有用。
index=index
选择单个元素基于其在列表中的位置(从0开始)。
字符串匹配式样
有各种各样的式样语法可用于匹配字符串值:
·glob:pattern:用″glob″去匹配一个字符串。″Glob″是一种用于命令行shells的代表性的有限正则表达式语法。在一个glob式样中, ″*″代表任意序列字符集,而″?″则代表任意单个字符。Glob式样匹配整个字符串。
·regexp:regexp:使用正则表达式匹配字符串。可使用所有的JavaScript正则表达式。
如果没有指定式样前缀,Selenium假定其为″glob″式样。
Selenium Actions
addLocationStrategy (strategyName, functionDefinition)
为selenium定义一个新的函数用于定位页面上的元素。例如,如果你定义了一个方法″foo″,并运行了click(″foo=blah″),我们将运行你的函数,传递给你字符串″blah″,并点击该函数所返回的元素,如果返回为null,则抛出一个″Element not found″的错误。我们将给该函数传递三个参数。
·locator:用户传递过来的字符串
·inWindow:当前所选中的窗体
·inDocument:当前所选中的文档
如果未找到相应的元素,则函数必须返回一个null。
参数:
·strategyName –定义的方法名;只能使用字母[a-zA-Z],不能包含空格或其他标点符号。
·functionDefinition –在JavaScript函数中的一个定义body的字符串。
如:return inDocument.getElementById(locator);
addSelection (locator, optioLocator)
为通过使用选择定位器,在一个可多选元素中所选择的集合添加一个selection。@查看#doSelect关于选择定位器的细节。
参数:
·locator –用于指定一个多选框的元素定位器
·optionLocator –一个选择定位器(默认为标签)
allowNativeXpath (allow)
指定Selenium是否使用XPath的本地浏览执行(如果有可用的本地版本);如果传递的值为″false″,我们将使用pure-JavaScript. xpath库。使用pure-JS xpath库可以提高xpath元素定位器在不同浏览器中的一致性,但其执行速度将大大低于本地执行。
参数:
·allow – Boolean,true意味着我们更愿意使用本地XPath;false则意味着我们将只使用JS XPath
altKeyDown()
按下alt键并保持其按下状态,直到doAltUp()被调用或一个新的页面被加载。
altKeyUp()
释放alt键
answerOnNextPrompt (answer)
通知Selenium返回下一次JavaScript. prompt[window.prompt()]所指定的回答字符串。
参数:
·answer –对弹出的提示所给与的回答
assignId (locator,identifier)
临时为指定元素设定一个″id″属性,使你可以在将来使用其ID,以代替缓慢且更复杂的XPath。该ID将在页面重载后消失。
参数:
·locator –指向某个元素的元素定位器
·identifier –为指定元素作为ID使用的字符串
break()
暂停当前正在进行的测试,并等待用户按下继续按钮。这个命令对于调试非常有用,但使用时要特别小心,因为他将强制暂停自动化测试,直到用户手动操作。
check(locator)
勾选一个关联性按钮(checkbox/radio)
参数:
·locator –一个元素定位器
chooseCancelOnNextConfirmation()
默认情况下,Selenium的重载window.confirm()函数将返回true,等同于用户手动点击OK;执行该命令后,下一次调用confirm()将返回false,等同于用户手动点击了Cancel。Selenium对后来的确认动作将继续使用默认行为,自动返回true(OK),除非/直到你为每个确认动作明确的调用此命令。
chooseOkOnNextConfirmation()
撤销调用chooseCancelOnNextConfirmation的效果。注意,Selenium的重载window.confirm()函数通常将自动返回true,等同于用户手动点击OK,因此你没有必要使用此命令,除非由于某种原因使你在下一次确认动作前不得不改变你先前的想法。在任意确认动作后,Selenium对后来的确认动作将继续使用默认行为,自动返回true(OK),除非/直到你为每个确认动作明确的调用chooseCancelOnNextConfirmation()。
click(locator)
点击一个链接、按钮、多选框或单选框。如果该点击事件导致了新的页面加载(如同链接通常所作的),将调用waitForPageToLoad。
参数:
·locator -一个元素定位器
clickAt(locator,coordString)
点击一个链接、按钮、多选框或单选框。如果该点击事件导致了新的页面加载(如同链接通常所作的),将调用waitForPageToLoad。