python——selenium——八种定位元素的方法
1.理论:
2.举例:
(1)通过【id】、【name】、【class_name】、【tag_name】匹配
- 导入【webdriver】、【By】
from selenium import webdriver
from selenium.webdriver.common.by import By
- 定义一个driver,使用谷歌浏览器驱动,打开文件【example_ele.html】
driver=webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/selenium(3)/selenium/example_ele.html')
文件源代码如下,可复制源代码保存到本地任意路径,将路径填入引号内即可
【这是文件源代码】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
输入框:<input name="s1" id="t1" class="m1" type="text"/>
<br>
按钮:<input value= "button" , name="b1" id="d1" class="m n1" type="button" />
</body>
</html>
- 通过定位输入框,往输入框输入文字,来验证【id】、【name】、【class_name】、【tag_name】四种定位方式如下,如运行后输入文字成功,则表示定位无误:
ele_t1=driver.find_element_by_id('t1') # 通过【id】定位
ele_t2=driver.find_element(By.ID,'t1') # 通过【id】定位
ele_t3=driver.find_element_by_name('s1') # 通过【name】定位
ele_t4=driver.find_element(By.NAME,'s1') # 通过【name】定位
ele_t5=driver.find_element_by_class_name('m1') # 通过【class_name】定位
ele_t6=driver.find_element(By.CLASS_NAME,'m1') # 通过【class_name】定位
ele_t7=driver.find_element_by_tag_name('input') # 通过【tag_name】定位
ele_t8=driver.find_element(By.TAG_NAME,'input') # 通过【tag_name】定位
ele_t1.send_keys('这是一个输入框') # 往以上8个定位中输入文字,验证定位是否成功
(2)通过【xpath】匹配(父类子类可相互查询)
- 导入【webdriver】
from selenium import webdriver
from selenium.webdriver.common.by import By
- 定义一个driver,使用谷歌浏览器驱动,打开文件【example_select.html】
driver=webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/selenium(3)/selenium/example_ele.html')
文件源代码如下,可复制源代码保存到本地任意路径,将路径填入引号内即可
【这是文件源代码】
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>案例 </title>
<script type="text/javascript">
function showConfirm(){
var t1 = document.f1.t1;
if (confirm("Some question?")){
t1.value = "oked";
}else{
t1.value = "canceled";
}
}
</script>
</head>
<body>
<h1> 下拉框 select标签 </h1>
<select id="s1">
<option value="-1">--SELECT--</option>
<option value="46">Business Phone</option>
<option value="47">Cell Phone</option>
<option value="48">Email</option>
<option value="49">Fax</option>
<option value="51">Home Phone</option>
<option value="50">Mail</option>
</select>
<br /> <br /> <br /><br /> <br /><br /> <br /><br />
<hr />
<h1> 弹出框 案例 </h1>
<form name="f1">
<input type="button" name="b1" value="Click For Confirm" onclick="showConfirm()"><br><br>
<input type="text" name="t1">
</form>
</body>
</html>
- 通过定位输入框,往输入框输入文字,来验证【xpath】定位方式如下,如运行后输入文字成功,则表示定位无误:
ele_t9=driver.find_element_by_xpath('//input[@name="s1" and @id="t1" and @class="m1"]')
ele_t9.send_keys('这是一个输入框') # 往以上定位中输入文字,验证定位是否成功
- 通过xpath匹配父类子类,要定位到如图所示红框中【SELECT】及其下拉框内容,可以通过父类子类相互定位
【复制过来的HTML代码如下】
<select id="s1">
<option value="-1">--SELECT--</option>
<option value="46">Business Phone</option>
<option value="47">Cell Phone</option>
<option value="48">Email</option>
<option value="49">Fax</option>
<option value="51">Home Phone</option>
<option value="50">Mail</option>
</select>
所以可以首先通过id找到父类
ele_father=driver.find_element_by_xpath('//select[@id="s1"]')
把父类下的子类定义为一个列表【slist】
slist=ele_father.find_elements_by_xpath('option')
for ele in slist:
print(ele.text)
所以可以从列表中找到第一个子类【ele_son】
ele_son=slist[0]
也可以通过子类找到其父类【ele_father2】
ele_father2=ele_son.find_element_by_xpath('..')
通过父类【ele_father2】找到父类的父类【ele_father2_father】
ele_father2_father=ele_father2.find_element_by_xpath('..')
以此类推……
(3)通过link匹配网址(模糊匹配和完全匹配)
- 导入【webdriver】
from selenium import webdriver
from selenium.webdriver.common.by import By
- 定义一个driver,使用谷歌浏览器驱动,打开文件【example_pages.html】
driver=webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/4%E6%9C%88/4.26%E2%80%94%E2%80%94selenium/selenium(3)/selenium/example_pages.html')
文件源代码如下,可复制源代码保存到本地任意路径,将路径填入引号内即可
【这是文件源代码】
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<a href="top.html" target="_blank" >这是 top 上面 : < frame src="top.html" name="topFrame" /></a> <br/><br/><br/><br/>
<a href="left.html" target="_blank" >这是 left 左边 : < frame src="left.html" name="leftFrame" /></a><br/><br/><br/><br/>
<a href="main.html" target="_blank">这是 main 居中 : < frame src="main.html" name="mainFrame" /></a>
</body>
</html>
- 模糊匹配,即通过部分关键字匹配
ele_link = driver.find_element_by_partial_link_text("这是 top 上面")
print(ele_link.text)
# 运行结果:这是 top 上面 : < frame src="top.html" name="topFrame" />
- 完全匹配,即通过部分关键字匹配
ele_link2 = driver.find_element_by_link_text('这是 main 居中 : < frame src="main.html" name="mainFrame" />')
print(ele_link2.text)
# 运行结果:这是 main 居中 : < frame src="main.html" name="mainFrame" />
版权声明:本文为weixin_56039103原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。