一、定位方法

注意:元素属性必须唯一存在

#id定位
find_element_by_id()
#name定位
find_element_by_name()
#class_name定位
find_element_by_class_name()
#链接文本定位
find_element_by_link_text()
#部分链接文本定位
find_element_by_partial_link_text()
#xpath定位
find_element_by_xpath()
#css定位
find_element_by_css_selector()
#tag_name定位
find_element_by_tag_name() #selenium By定位,使用这种用法前需要导入By类,如下:
from selenium.webdriver.common.by import By
#id定位
find_element(By.ID,value)
#name定位
find_element(By.NAME,value)
#class_name定位
find_element(By.CLASS_NAME,value)
#链接文本定位
find_element(By.LINK_TEXT,value)
#部分链接文本定位
find_element(By.PARTIAL_LINK_TEXT,value)
#xpath定位
find_element(By.XPATH,value)
#css定位
find_element(By.CSS_SELECTOR,value)
#tag_name定位
find_element(By.TAG_NAME,value)

1.id定位

from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_id("kw").send_keys("python")

2.name定位

from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_name("wd").send_keys("python")

3.class_name定位

from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_class_name("s_ipt").send_keys("python")

4.链接文本定位

from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_link_text("hao123").click()

5.部分链接文本定位

from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_partial_link_text("hao").click()

6.tag_name定位

  • tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。任意打开一个页面,都会发现大量的<div>、<input>、<a>等tag,所以tag name定位很少用
from selenium import webdriver

dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
# js = "document.getElementById('kw').value='selement'"
# dr.execute_script(js)
inputs = dr.find_elements_by_tag_name("input")
for i in inputs:
if i.get_attribute("id") == "kw": #获取元素属性值进行判断
i.send_keys("selenium")

7.Java_Script定位

from selenium import webdriver

dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
js = "document.getElementById('kw').value='selenium'"
dr.execute_script(js)

8.xpath定位

(1)直接复制页面中xpath

(2)相对路径(找祖籍)

  • 两个斜线(//)代表相对路径
  • 使用了通配符 * 表示匹配任意标签名
from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_xpath('//*[@class="s_ipt"]').send_keys("python")
from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_xpath('//input[@class="s_ipt"]').send_keys("python")
from selenium import webdriver
from time import sleep dr =webdriver.Chrome()
dr.get("http://xxxxxxxx.com/")
dr.find_element_by_class_name("login").click()
title1 = dr.title
#组合定位
dr.find_element_by_xpath('//input[@placeholder="请输入手机号码" and @name="loginName"]').send_keys("1777982xxxx")
dr.find_element_by_name("loginPwd").send_keys("xxxxxxxx")
dr.find_element_by_xpath('//*[@class="login1"]/div[2]').click()
sleep(2)
title2 = dr.title
if title1 == title2:
raise AssertionError
else:
pass

(3)绝对路径/层级定位

  • 从HTML元素DOM树从上至下一级一级查找
  • / 表示上下级
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(2)
dr.find_element_by_xpath("html/body/div[5]/div/div[1]/form/div/div/table/tbody/tr[1]/td[2]/input").send_keys("zhengying")

(4)相对路径结合绝对路径用法

from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(2)
dr.find_element_by_xpath('//*[@id="lsform"]/div/div/table/tbody/tr[1]/td[2]/input').send_keys("zhengying")

9.css定位

css常用符号:

  • #  表示id
  • .  表示class
  • >  表示子元素,层级

(1)css中通过id定位

from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
time.sleep(2)
dr.find_element_by_css_selector("#kw").send_keys("zhengying")

(2)css中通过class定位

from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
time.sleep(2)
dr.find_element_by_css_selector(".s_ipt").send_keys("selenium")

(3)通过其它属性定位

find_element_by_css_selector("[属性='属性值']")

find_element_by_css_selector("[属性=属性值]") ---------------- 请注意这里属性值没有加引号

find_element_by_css_selector("[属性1=属性值1][属性2=属性值2]") ---------------- 组合定位
from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_css_selector('[id=kw]').send_keys("selenium")
from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
#组合定位
dr.find_element_by_css_selector('[id=kw][name=wd]').send_keys("selenium")

(4)通过父子关系定位:

  • 假如你不知道某人的身份证号码、名字、手机号码等信息时无法取得联系,但是你知道某人爸爸的手机号码,此时你可以通过他爸爸来找到某人。
  • 换成术语就是当我们定位元素时,发现没有可以标识的唯一的元素的属性值时,那我们可以考虑用父亲标签结合属性来定位元素。
  • css路径定位时,不能和xpath定位一样标注出第几个标签
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(2)
dr.find_element_by_css_selector('.scbar_txt_td > input').send_keys("selenium")

(5)css的绝对路径定位

from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(2)
dr.find_element_by_css_selector('html>body>div>div>div>form>div>div>table>tbody>tr>td>input').send_keys("selenium")

python selenium(定位方法)的更多相关文章

  1. selenium定位方法实例

    selenium定位方法实例 首先打开浏览器输入微博的网址,将网页最大化,等待3秒 from selenium import webdriver import time driver = webdri ...

  2. selenium定位方法(二)

    selenium定位方法(二)  1.xpath定位:xpath是在XML中查找节点所在的路径的表达式 1)绝对路径的Xpath表达式 例:/html/body/div/div[1]/ul//li[3 ...

  3. selenium定位方法(一)

    selenium定位方法-(一) 1.定位页面元素的方式(By类的方法) 1)id定位:通过页面元素的id属性值来定位一个页面元素       注意事项:如果每次刷新网页之后元素的id属性值都不同,说 ...

  4. Python+Selenium定位元素的方法

    Python+Selenium有以下八种定位元素的方法: 1. find_element_by_id() eg: find_element_by_id("kw") 2. find_ ...

  5. python+selenium安装方法

    一.准备工具: 下载 python[python 开发环境] http://python.org/getit/ 下载 setuptools [python 的基础包工具] http://pypi.py ...

  6. selenium定位方法(java实例)(二)

    从下图中可以看到selenium有三类定位元素的方法,一种是直接通过属性.标签以及链接来定位,一种是XPath方式,最后一种是CSS方式. 下表列举了元素定位的例子 selenium之页面元素定位方法 ...

  7. Selenium+Python常见定位方法

    参见官网:http://selenium-python.readthedocs.io/locating-elements.html 有多种策略来定位页面中的元素.你可以使用最适合你的情况.Seleni ...

  8. python+selenium 定位元素的主要方法

    selenium对web各元素的操作首先就要先定位元素,定位元素的方法主要有以下几种: 通过id定位元素:find_element_by_id("id_vaule") 通过name ...

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

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

  10. 【selenium学习笔记一】python + selenium定位页面元素的办法。

    1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的 ...

随机推荐

  1. Java第五天,API常用类,静态(static)、集合(ArrayList)、日期(Date)、日历(Calendar)的使用方法

    上文中我们学习到了Random随机数类和ArrayList<E>集合.这两个知识点都是经常用到的,那么除了这两个外,还有哪些知识点是我们所必须掌握的呢? static 使用static需要 ...

  2. 萌新带你开车上p站(一)

    本文作者:萌新 0x01前言 这一系列文章为pwnable.krToddlr’s Bottle的全部题解,其中有三道题目相对而言稍难或者说比较经典,单独成篇,其他题目的题解放在一起发出来. 0x02f ...

  3. 刨根问底系列(3)——关于socket api的原子操作性和线程安全性的探究和实验测试(多线程同时send,write)

    多个线程对同一socket同时进行send操作的结果 1. 概览 1.1 起因 自己写的项目里,为了保证连接不中断,我起一个线程专门发送心跳包保持连接,那这个线程在send发送数据时,可能会与主线程中 ...

  4. java web之Filter详解

    java web之Filter详解 2012-10-20 0 个评论 作者:chenshufei2 收藏 我要投稿 .概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,W ...

  5. Windows环境下搭建Cocos2d-x3.2环境并配置android交叉编译环境

    一.软件 1)VS2012(C++11特性在VS2012以上可以使用):传送门: 2)Cocos2d-x官网源码:传送门:http://cocos2d-x.org/download 3)JDK:传送门 ...

  6. Python中关于第三方库的补充

    Python语言的强大之处在于它的开源.正是因为它的开源,产生了成百上千的第三方库,涵盖了计算机的几乎所有的方向.第三方库的安装也并不是特别的复杂,通过在cmd中使用pip命令可以安装几乎所有的库,但 ...

  7. PHP函数:debug_backtrace

    debug_backtrace()  - 产生一条 PHP 的回溯跟踪(backtrace). 说明: debug_backtrace ([ int $options = DEBUG_BACKTRAC ...

  8. 小小小小小flag

    2020:300道题 小小小小小flag 150红题 100道橙题 50道黄题 努力变强!加油 我的主页: 主页https://www.luogu.com.cn/user/306734 谢谢大家,目前 ...

  9. linq 高集成化数据访问技术

    一:  新建名为linq的项目 创建 linq 1 在项目里添加文件夹 App_Code; 2 在文件夹(App_Code) 添加  名为db的    Linq To Sql 类  :一个Linq T ...

  10. Springboot:员工管理之删除员工及退出登录(十(9))

    springboot2.2.6 delete请求报错,降至2.1.11功能可用 原因未知 构建员工删除请求 com\springboot\controller\EmployeeController.j ...