Selenium WebDriver查找页面元素及元素操作

元素常用方法定位方法

  • 通过id定位元素:find_element_by_id('id_value')
  • 通过name定位元素:find_element_by_name('name_value')
  • 通过tag_name定位元素:find_element_by_tag_name('tag_name_value')
  • 通过class_name定位元素:find_element_by_class_name("class_name")
  • 通过css定位元素:find_element_by_css_selector();用css定位是比较灵活
  • 通过xpath定位元素:find_element_by_xpath("xpath")
  • 通过link_text定位:driver.find_element_by_link_text("新闻").click()
  • 通过partial link_text 定位:driver.find_element_by_partial_link_text("闻").click()

定位分类总结

  1. id,name,class_name:为元素属性定位
  2. tag_name :为元素标签
  3. link_text,partial link_text:超链接定位(a标签)
  4. xpath:为元素路径
  5. Css:为css元素选择器定位

fireBug,firepath,firefinder

  1. firebug是firefox下的一个扩展,能够调式所有网站语言,如Html,css等。但Firebug最吸引人的就是javascript调式功能,使用起来非常方便,而且在各种浏览器下都能使用,是一套完整而强大的web开发工具
  2. FirePath是一个Firebug扩展,它添加了一个开发工具来编辑、检查和生成XPath 1.0表达式、CSS 3选择器和JQuery选择器。
  3. Firefinder是Firebug的一个附加组件,它可以帮助找到匹配选定的CSS选择器(s)或XPath表达式的HTML元素。你也可以在悬停或通过上下文菜单时自动选择元素。

    查看结果,然后通过friendfire特性与朋友分享,或者点击检查,在Firebug的HTML选项卡中找到对应的元素。

定位元素示例

下面是百度输入框的html代码,可以通过firebug或者谷歌的审查元素得(F12):

<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">

1.通过id定位

则百度的输入框即可表示为:find_element_by_id(“kw1”)

2.通过name定位

则可以表示为:find_element_by_name(“wd”)

3.通过class_name定位元素

driver.find_element_by_class_name("s_ipt")

4.通过tag_name定位

input其实就是tag_name(标签名)

同样也可以表示成:find_element_by_tag_name("input")

返回:符合条件的第一个标签

可见仅仅通过标签名去定位时,一般一种标签在一个页面里面不会出现不止一次甚至大量出现,这种定位方式的作用不是很大,所以用的也就比较少

5.通过css定位元素

cssSelector这种元素定位方式跟xpath比较类似,但执行速度较快,而且各种浏览器对它的支持都相当到位

一般class是用.标记,id是用#标记,标签名直接写具体标签名就好

find_element_by_css_selector("#su")

find_element_by_css_selector(".s_ipt")

find_element_by_css_selector("[name=wd]")

6.通过xpath定位元素

xpath是一种在xml文档中定位元素的语言。因为HTML可以看作XML的一种实现,所以selenium用户可使用这种强大语言在web应用中定位元素。

xpath的值可以通过firebug或者谷歌的审查元素中

右键功能:复制xpath即可获得

列子:

driver.find_element_by_xpath(".//input[@id='kw']")

driver.find_element_by_xpath(".//*[@id='kw']")

其中的标签名input也可以用*来代替,而且只要是在该标签内,任意属性都可以

7.通过link_text、partial_link_text定位

这两种定位方式是专门用于定位超链接的,也就是对应html页面中的标签,括号里的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只些部分超链接文字。

比如点击百度首页中右上角的新闻超链接,可以这样去定位:

driver.find_element_by_link_text("新闻").click()

driver.find_element_by_partial_link_text("闻").click()

elements复数定位

在上面的例举的八中基本定位方式种,都有对应的复数形式,分别是下面:

id复数定位find_elements_by_id()

name复数定位find_elements_by_name()

这些复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list队列,我们也可以利用这个去定位单个的元素。比如百度首页种,右上角有新闻、视频、地图、贴吧等一些链接,我们通过f12查看源码可以发现,这些链接都有共同的class, class="mnav"。

举个例子,比如定位排在第六个的学术,可以这样定位:driver.find_elements_by_class_name("mnav")[5].click()

总结

\1. 当页面元素有id属性时,最好尽量用id来定位。但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法。

\2. xpath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。

\3. 当要定位一组元素相同元素时,可以考虑用tagName或name。

\4. 当有链接需要定位时,可以考虑linkText或partialLinkText方式。

简单元素操作

clear()清除文本

send_keys(*value)模拟按键输入

click()单击元素

size 返回元素的尺寸

text 返回元素的文本

get_attribute(name) 获取属性值

is_displayed()设置该元素是否可见 判断元素是否可见 是否可用 is_enable() 了解

键盘事件---(了解)

send_keys()模拟键盘输入

from selenium.webdriver.common.keys import Keys

send_keys(Keys.BACK_SPACE) 删除键

* send_keys(Keys.SPACE) 空格键(Space)

* send_keys(Keys.TAB) 制表键(Tab)

* send_keys(Keys.ESCAPE) 回退键(Esc)

* send_keys(Keys.ENTER) 回车键(Enter)

* send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)

* send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)

* send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)

* send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)

* send_keys(Keys.F1) 键盘 F1

……

* send_keys(Keys.F12) 键盘 F12

设置元素等待

selenium显示等待隐式等待的区别

  • selenium的显示等待

    原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么久跳出Exception(简而言之,就是直到元素出去才去操作,如果超时则报异常)

    element=WebDriverWait(driver,timeout, poll_frequency=0.5,ignored_exceptions=None).until(
    EC.presence_of_element_located((By.ID, "kw"))
    )
    driver 浏览器驱动
    timeout 最长超时时间 默认以秒为单位
    poll_frequency=0.5 步长
    ignored_exceptions 超时后的异常信息 默认抛noSuchElementException
    EC.presence_of_element_located((By.ID, "kw")) 判断元素是否被加载在dom树中,不代表他一定可见
  • selenium的隐式等待

    原理:隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素为止。

    注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部不断的刷新页面去寻找我们需要的元素

    含义:通过一定时长等待,如果超出设置的时长元素还没有被加载,抛出NosuchException.
    # 设置隐式等待为 10 秒
    driver.implicitly_wait(10)
  • 笨方法等待(死等)

    使当前线程进入等待,time.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以要慎用此方法

    time.sleep(6)

    浏览器的基本操作

    选择浏览器: driver = webdriver.Firefox()

    打开url: driver.get(self.base_url + " www.baidu.com")

    前进/后退: driver.forward()/driver.back()

    刷新: driver.refresh()

    最大化:browser.maximize_window()

    返回当前页面标题:print(driver.title)

    返回当前页面url:print(driver.current_url)

    返回当前浏览器的所有窗口:driver.window_handles

    返回当前浏览器的窗口句柄:driver.current_window_handle

    选择窗口: driver.switch_to_window(“window_name”)

    对话框操作: driver.switch_to_alert() #选择窗口对象

    #浏览器最大化

    driver.maximize_window()

    #设置浏览区宽高

    driver.set_window_size(480, 800)

    截取当前页面: driver.get_screenshot_as_file("C:/Users/Administrator/Desktop/selenium/baidu.png")

    关闭浏览器: driver.quit()/driver.close()

Selenium八大元素定位(元素定位,元素等待)的更多相关文章

  1. UI自动化(selenium+python)之元素定位的三种等待方式

    前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...

  2. selenium八大元素定位方法

    1.ID定位 可以根据元素的id来定位属性,id是当前整个HTML页面中唯一的,所以可以通过id属性来唯一定位一个元素,是首选的元素定位方式.(动态ID不做考虑) # 导入webdriver和By f ...

  3. Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

         在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...

  4. Python3 Selenium定位不到元素常见原因及解决办法

    Python3 Selenium定位不到元素常见原因及解决办法 一.问题描述 在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况: 报错信息: no such e ...

  5. Python+selenium学习(二) selenium 定位不到元素

    转载:https://www.cnblogs.com/tarrying/p/9681991.html tarrying selenium的三种等待时间 //隐式等待(20秒以内没哥一段时间就会去找元素 ...

  6. selenium使用笔记(三)——元素定位

    selenium进行自动化测试的一个很重要的东西那就是元素定位,如果元素都没法定位就无法操作它,也就无法进行自动化测试了.网上对于元素定位有很多的介绍,很详细很详细的,但是依然有很多新手总是会遇到无法 ...

  7. 为什么selenium定位不到元素

    在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况,一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理 ...

  8. 自动化测试selenium(三) 由于iframe 定位不到元素

    iframe原因定位不到元素 现在的项目后台基本都是上左右结构,要出现这个结构效果,需要使用到了iframe标签: 我们先说说iframe在java中使用的方法: driver.switchTo(). ...

  9. 转载:selenium webdriver定位不到元素的五种原因及解决办法

    1.动态id定位不到元素for example:        //WebElement xiexin_element = driver.findElement(By.id("_mail_c ...

  10. selenium webdriver定位不到元素的五种原因及解决办法

    1.动态id定位不到元素 for example:        //WebElement xiexin_element = driver.findElement(By.id("_mail_ ...

随机推荐

  1. 解决 Error L6915E 问题

    出现以下错误: Error: L6915E: Library reports error: The semihosting __user_initial_stackheap cannot reliab ...

  2. 【Flutter】一文读懂混入类Mixin

    [Flutter]一文读懂混入类Mixin 基本介绍 Mixin是一种有利于代码复用,又避免了多继承的解决方案. Mixin 是面向对象程序设计语言中的类,提供了方法的实现,其他类可以访问 Mixin ...

  3. 如何深度学习Python?

    安装必要软件:首先需要安装Anaconda或Miniconda等科研计算环境,并创建虚拟环境以便管理不同项目所需库和版本.可以按照如下步骤进行操作: 下载并安装 Anaconda 或 Minicond ...

  4. 放弃"Jenkins"的种种理由,期待更好赋能研发的持续交付平台

    Jenkins 很酷,但是不完美,有历史局限性造成的问题.本文仅从"如何更好给研发团队赋能的角度",剖析Jenkins, 探讨理想的持续交付平台, 不带货无广告- 不完美的Jenk ...

  5. JAVA学习week3

    本周由于c++小学期作业.未能按时学习JAVA 主要复习了基本语法 hello word 输出语法 输出格式的选择,进制的转换,注释的选择 还预习了变量相关的知识点

  6. timeSetEvent()函数定时器的使用

    1.定时器函数的使用 微软公司在其多媒体Windows中提供了精确定时器的底层API支持,利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一个事件.函数或过程的调用. ...

  7. OpenEuler22.03安装PostgreSQL15.5并配置一主二从

    环境准备 序号 IP 标识(hostname) CPU/内存配置 系统盘 数据盘 1 192.168.8.190 pg01 8C+16G 80G 500G 2 192.168.8.191 pg02 8 ...

  8. 春秋云镜 - CVE-2022-32991

    靶标介绍: 该CMS的welcome.php中存在SQL注入攻击. 访问页面,先注册,使用邮箱加密码登录. bp抓包,后台挂上sqlipy然后去测welcome.php,常用的语句都没成功但过一会就有 ...

  9. Rust 学习笔记

    rust 学习梳理 数据类型 基于已明确的类型,Rust会推断剩下大部分类型.基于类型推断Rust具备了与动态类型语言近似的易读性,并仍能在编译期捕获类型错误. 函数可以是泛型的:单个函数ujiu可以 ...

  10. 8种超简单的Golang生成随机字符串方式

    本文分享自华为云社区<Golang生成随机字符串的八种方式与性能测试>,作者: 张俭. 前言 这是**icza**在StackOverflow上的一篇高赞回答,质量很高,翻译一下,大家一起 ...