『鹤岗市』人事局:Selenium系列(一) - 8《种元素定位方》式的详细解读

admin 6个月前 (04-13) 科技 35 1

Sunbet

Sunbet www.wzpyzwls.com sunbet(是)Sunbet的大型官方娱乐网站,“游戏种类繁”多,Sunbet「免费无限制」。(现推出手机客)户端app,24小时sunbet客服在线,〖只做让〗您满意的网站。

,

安装Selenium{和}“下载”Driver

安装selenium

pip3 install  selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

 

“下载”Driver

{打开}:http://npm.taobao.org/mirrors/chromedriver/

(《找到》自己)Chrome对应的版本“下载”即可

 

{访问百度的小}Demo

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
__title__  = 
__Time__   = 2020/3/25 17:00
__Author__ = <小菠萝测>试笔记
__Blog__   = https://www.cnblogs.com/poloyy/
"""
import time

from selenium import webdriver

# 加载浏览器驱动
driver = webdriver.Chrome("../resources/chromedriver.exe")

# {访问网址}
driver.get("http://www.baidu.com")

# 《找到》搜索框
inputElement = driver.find_element_by_id("kw")

# ‘输入搜索内容’
inputElement.send_keys("<小菠萝测>试笔记")

# 《找到》搜索按钮
searchElement = driver.find_element_by_id("su")

# {点击搜索按钮}
searchElement.click()

time.sleep(5)

# 释放资源, “退出浏览器”
driver.quit()

《可以看到》,流水账式写Web「自动化测试代码的顺序」就(是):

加载驱动 - 『访问链接』 - 【页面】操作

 

首先,【先将一个测试】html保存到本地,{后续案例就按照这}个页面来演示啦!

‘代’码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><小菠萝测>试笔记</title>
</head>
<body>

<a><用户名>:</a>
<input id="username" class="username">
<a> 密码[</a>
<input id="password" name="password">
<button class="login">〖登录〗</button>
<br>
<p>测试啦</p>
<p>{再一次测试}啦</p>
<br>
<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
   class="mnav sp dot">『终极〖抗击〗<肺炎>啊』</a>
<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020"
   class="mnav sp dot">〖抗击〗<肺炎></a>
<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
   class="mnav sp dot">〖抗击〗<肺炎></a>

<div>
    <ul>
        <li class="li">111</li>
        <li class="li">222</li>
        <li class="li">333</li>
    </ul>
    <ul>
        <li>aaa</li>
        <li>bbb</li>
        <li>ccc</li>
    </ul>
</div>
</body>
</html>

 

〖辣么〗,我们接下来就说下有哪“些【元素】定位的方式”呢

 

方式一:『『「【「《通》过」】」【元素】』的』id

# 《找到》id = username“(的【元素】)”
username = driver.find_element_by_id("username")
# 输入值 〖‘张三’〗
username.send_keys("〖‘张三’〗")
# 《找到》od = password“(的【元素】)”
password = driver.find_element_by_id("password")
# 输入值 123
password.send_keys("123")

(《<(知识点)>》)

〖在前端〗,{一般一个}id值(是)唯一的,『只属于一个【元素】』

 

《方式二》:『『「【「《通》过」】」【元素】』的』class

# =====「【「《通》过」】」 【元素】Class《查找》((仅返回‘匹配’到)的第一个)
login_btn = driver.find_element_by_class_name("login")

# 点击
login_btn.click() 

(《<(知识点)>》)

  • 〖在前端〗,一般多个【元素】共〖用一个〗class
  • 〖‘但’〗 find_element_by_class_name <只返回第一个>‘匹配’到class“(的【元素】)”
  • 『坏』处:当找不到【元素】则《报错》
  • 如果想返回所有‘匹配’到class“(的【元素】)”, 可看下面代码[
# =====《找到》所有class=li“(的【元素】)”
lis = driver.find_elements_by_class_name("li")
for i in lis:
    print(i.text)

{执行}结果

111
222
333

(《<(知识点)>》)

  • 返回的(是)一个【元素】列『表』,若只‘匹配’到一个也(是)列『表』
  • “好处”:当没有《找到》【元素】时不会《报错》,而(是)返回空列『表』 [] 

 

方式三:『『「【「《通》过」】」【元素】』的』name

# =====「【「《通》过」】」 【元素】name《查找》【元素】((仅返回‘匹配’到)的第一个)
password = driver.find_element_by_name("password")

# =====输入值 123
password.send_keys("123")

(《<(知识点)>》)

  • {和}class一样,也有可能有多个【元素】共〖用一个〗name
  • 〖‘但’〗  find_element_by_name  <只返回第一个>‘匹配’到name“(的【元素】)”
  • 想返回多个的话,{和}class一样,<需要调用> find_elements_by_name 方法,〖这里不再赘述〗,写法{和}上面一致( 已标红[)

 

方式四:「【「《通》过」】」【元素】『标』签

# =====「【「《通》过」】」 【元素】『标』签((仅返回‘匹配’到)的第一个)=====
p = driver.find_element_by_tag_name("p")
# 打印【元素】的文本值
print(p.text)

print("===")
# =====「【「《通》过」】」 【元素】『标』签(返回‘匹配’到的所有【元素】)=====
ps = driver.find_elements_by_tag_name("p")
for p in ps:
    print(p.text)

{执行}结果

测试啦
=== 测试啦 {再一次测试}啦

(《<(知识点)>》)

  • 多个【元素】同种HTML《『标』签见怪》不怪了
  • “同样的”, find_element_by_tag_name 返回第一个‘匹配’到『标』签“(的【元素】)”
  •  find_elements_by_tag_name {可}以返回所有‘匹配’到『标』签“(的【元素】)”

 

【方式五】:「【「《通》过」】」超链接文本

# =====「【「《通》过」】」 超链接的文本《查找》【元素】(《仅》支持精确‘匹配’)
atext = driver.find_element_by_link_text("〖抗击〗<肺炎>")
print(atext.text)

print("===")
ass = driver.find_elements_by_link_text("〖抗击〗<肺炎>")
for i in ass:
    print(i.text)

{执行}结果

〖抗击〗<肺炎>
=== 〖抗击〗<肺炎> 〖抗击〗<肺炎>

(《<(知识点)>》)

  • find_element_by_link_text (是)精确‘匹配’,“需要文本”完全相同才能‘匹配’
  • 若需要返回全部‘匹配’到“(的【元素】)”,<也需要用> find_elements_by_link_text  

 

“方式六”:「【「《通》过」】」超链接文本(模糊‘匹配’)

# =====「【「《通》过」】」 超链接的文本《查找》【元素】(支持模糊‘匹配’)
atext = driver.find_element_by_partial_link_text("<肺炎>")
print(atext.text)

print("===")
ass = driver.find_elements_by_partial_link_text("<肺炎>")
for i in ass:
    print(i.text)

{执行}结果

『终极〖抗击〗<肺炎>啊』
===
『终极〖抗击〗<肺炎>啊』
〖抗击〗<肺炎>
〖抗击〗<肺炎>

(《<(知识点)>》)

  • find_element_by_partial_link_text 支持模糊‘匹配’,包含文本则‘匹配’成功
  • 若需要返回全部‘匹配’到“(的【元素】)”,<也需要用>  find_elements_by_partial_link_text

 

方式七:「【「《通》过」】」xpath(“<万能>”,“重点”)

# ====「【「《通》过」】」 xpath
lis = driver.find_element_by_xpath("/html/body/div/ul[2]/li[1]")
print(lis.text)

{执行}结果

aaa

〖“注意”〗: xpath 包含的(《<(知识点)>》)很多,‘暂时不在这篇幅展开’讲,【后续会单独补充详细】博(文哦)!

 

方式八:「【「《通》过」】」css<选择器>(“<万能>”,“重点”)

# ====「【「《通》过」】」css<选择器>
lis = driver.find_element_by_css_selector("body > div > ul > li:nth-child(2)")
print(lis.text)

{执行}结果

222

〖“注意”〗: css<选择器> 包含的(《<(知识点)>》)很多,‘暂时不在这篇幅展开’讲,【后续会单独补充详细】博(文哦)!

欧博开户声明:该文看法仅代表作者自己,与本平台无关。转载请注明:『鹤岗市』人事局:Selenium系列(一) - 8《种元素定位方》式的详细解读

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:474
  • 页面总数:0
  • 分类总数:8
  • 标签总数:850
  • 评论总数:143
  • 浏览总数:3464