• 查找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)
  • 相关阅读:
    hudson中 ANT 编译警告: 编码 UTF-8 的不可映射字符解决方法
    Jmeter与hudson,ant集成
    Hudson配置路径
    python 面向对象:封装---对象的属性可以是另一个类创建的对象
    python 面向对象:封装
    python3 f-string格式化字符串的高级用法
    iOS微信支付无法直接返回APP的问题
    学习git&github
    Appium之xpath定位详解
    selenium等待方式详解
  • 原文地址:https://www.cnblogs.com/weiweim/p/8446511.html
Copyright © 2020-2023  润新知