SeleniumLibrary库-定位元素

Python/Java学习交流群:369606713


SeleniumLibrary库-定位元素

SeleniumLibrary中需要与网页上的元素进行交互的所有关键字,都带有一个通常称为locator的参数,该参数指定如何查找该元素。

通常,使用以下描述的 定位符语法 将定位符作为字符串给出,但是也可以使用WebElements。

Locator 语法

SeleniumLibrary支持根据不同的策略查找元素,例如元素id,XPath表达式或CSS选择器。

可以使用前缀明确指定策略,也可以隐式指定策略。

默认定位器策略

默认情况下,定位器被认为使用关键字特定的默认定位器策略。

所有关键字都支持基于idname属性的查找元素,但是某些关键字支持在上下文中有意义的其他属性或其他值。例如,单击链接支持href属性,链接文本以及常规idname的添加。

例如

Click Element example # 匹配 id 或者 name.
Click Link example # 匹配链接文本和href.
Click Button example # 匹配 id, name 或者 value.

如果定位器意外地以识别为显式定位器策略或隐式XPath策略的前缀开头,则可以使用显式default前缀来启用默认策略。

例如

Click Element name:foo # 查找名称为foo的元素。
Click Element default:name:foo # 使用默认策略使用值名称 name:foo.
Click Element //foo # 使用查找元素 XPath //foo.
Click Element default: //foo # 将默认策略与value结合使用 //foo.

明确的定位器策略

使用语法strategy:valuestrategy = value使用前缀指定显式定位器策略。首选前一种语法,因为后者与Robot Framework的命名参数语法相同,并且可能导致问题。分隔符周围的空格将被忽略,因此id:fooid:fooid:foo都是等效的。

例如

策略 基于什么匹配 实例
id Element id. id:example
name name attribute. name:example
identifier Either id or name. identifier:example
class Element class. class:example
tag Tag name. tag:div
xpath XPath expression. xpath://div[@id="example"]
css CSS selector. css:div#example
dom DOM expression. dom:document.images[5]
link Exact text a link has. link:The example
partial link Partial link text. partial link:he ex
sizzle Sizzle selector deprecated. sizzle:div.example
jquery jQuery expression. jquery:div.example
default Keyword specific default behavior. default:example

有关默认策略如何工作的更多信息,请参见下面的默认定位器策略部分。仅当定位器值本身偶然与某些显式策略匹配时,才需要使用显式默认前缀。

不同的定位器策略有不同的优缺点。建议尽可能使用id(显式地像id:foo一样)或使用默认的定位器策略(像foo一样),因为语法很简单,并且对于浏览器来说,按id定位元素很快。

如果元素没有ID或ID不稳定,则需要使用其他解决方案。

如果元素具有唯一的标签名称或类,则使用标签,类或css策略(例如tag:h1class:examplecss:h1.example)通常是一个简单的解决方案。

在更复杂的情况下,使用XPath表达式通常是最好的方法。它们非常强大,但缺点是它们也可能变得复杂。

实例

Click Element id:foo # Element with id 'foo'.
Click Element css:div#foo h1 # h1 element under div with id 'foo'.
Click Element xpath: //div[@id="foo"]//h1 # Same as the above using XPath, not CSS.
Click Element xpath: //*[contains(text(), "example")] # Element containing text 'example'.

注意

  • SeleniumLibrary 3.0和更高版本仅支持strategy:value语法。
  • 使用sizzle策略或其别名jquery要求被测系统包含jQuery库。
  • 在SeleniumLibrary 3.0之前,与表相关的关键字仅支持xpath,css和sizzle / jquery策略。