python——selenium——八种定位元素的方法

python——selenium——八种定位元素的方法

1.理论:
(1)导入【webdriver】、【sleep】
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版权协议,转载请附上原文出处链接和本声明。