查找UI元素

在WebDriver中定位元素可以在WebDriver实例本身或WebElement上完成。前者返回与查询相匹配的WebElement对象,如果找不到这样的元素则抛出异常。后者返回一个WebElements列表,如果没有DOM元素匹配查询,则可能为空。

“查找”方法使用称为“By”的定位器或查询对象。

By ID

这是定位元素的最有效和首选的方法。UI开发人员常犯的错误是在页面上使用非唯一的ID或自动生成ID,两者都应避免。html元素上的类比自动生成的id更合适。

如何找到如下所示的元素的示例:

< div  id = “coolestWidgetEvah” > ... </ div >
element = driver.find_element_by_id("coolestWidgetEvah")

By Class Name

在这种情况下,“类”是指DOM元素上的属性。通常在实际应用中有许多具有相同类名的DOM元素,因此找到多个元素成为找到第一个元素的更实际的选择。

如何找到如下所示的元素的示例:

<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>
cheeses = driver.find_elements_by_class_name("cheese")

By Tag Name

元素的DOM标签名称。

如何找到如下所示的元素的示例:

<iframe src="..."></iframe>
frame = driver.find_element_by_tag_name("iframe")

By Name

找到匹配name属性的输入元素。

如何找到如下所示的元素的示例:

<input name="cheese" type="text"/>
cheese = driver.find_element_by_name("cheese")

By Link Text

找到匹配可见文本的链接元素。

如何找到如下所示的元素的示例:

<a href="http://www.google.com/search?q=cheese">cheese</a>>
cheese = driver.find_element_by_link_text("cheese")

By Partial Link Text

找到部分匹配可见文本的链接元素。

如何找到如下所示的元素的示例:

<a href="http://www.google.com/search?q=cheese">search for cheese</a>>
cheese = driver.find_element_by_partial_link_text("cheese")

By CSS

就像这个名字所暗示的那样,它是一个由css定位的策略。默认情况下使用本地浏览器支持,因此请参阅w3c css选择器以获取一般可用的css选择器列表。如果浏览器不支持css查询,则使用Sizzle。IE6,7和FF3.0目前使用

并非所有浏览器都是平等的,一些可能在一个版本中运行的css可能无法在另一个版本中运行。

<div id="food"><span class="dairy">milk</span><span class="dairy aged">cheese</span></div>
cheese = driver.find_element_by_css_selector("#food span.dairy.aged")

By XPath

在高层次上,WebDriver尽可能使用浏览器的本地XPath功能。

DriverTag and Attribute NameAttribute ValuesNative XPath Support
HtmlUnit Driver Lower-cased As they appear in the HTML Yes
Internet Explorer Driver Lower-cased As they appear in the HTML No
Firefox Driver Case insensitive As they appear in the HTML Yes
< input  type = “text”  name = “example”  /> 
< INPUT  type = “text”  name = “other”  />
inputs = driver.find_elements_by_xpath("//input")

 比较显示:

XPath expressionHtmlUnit DriverFirefox DriverInternet Explorer Driver
//input 1 (“example”) 2 2
//INPUT 0 2 0

有时HTML元素不需要显式声明属性,因为它们默认为已知值。例如,“输入”标签不需要“类型”属性,因为它默认为“文本”。在WebDriver中使用xpath时的经验法则是,不应该期望能够匹配这些隐式属性。

使用JavaScript

可以执行任意javascript来查找元素,只要您返回DOM元素,它将自动转换为WebElement对象。

jQuery加载的页面上的简单示例:

element = driver.execute_script("return $('.cheese')[0]")

为页面上的每个标签查找所有输入元素:

labels = driver.find_elements_by_tag_name("label")
inputs = driver.execute_script(
    "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
    "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels)
原文地址:https://www.cnblogs.com/weiweim/p/8446511.html