python + selenium 新手随笔 元素定位
1.
from selenium import webdriver from selenium.webdriver.common.keys import Keys //Key 表示键盘上的键, By 定位文本中的元素 from selenium.webdriver.common.by import By
driver = webdriver.Firefox() // 创建 FireFox 的WebDriver
driver = webdriver.Chrome() // Chorme的webDriver
driver.get("http://www.python.org") //get()方法将导航到由URL给出的页面
assert "Python" in driver.title //断言来确认标题是否含有 “Python” 字样
elem = driver.find_element(By.NAME, "q") //WebDriver提供了find_element方法去寻找元素
elem.clear() //先清空 键盘
elem.send_keys("pycon") // 发送键 类似于键盘输入
elem.send_keys(Keys.RETURN) // 回车
assert "No results found." not in driver.page_source
driver.close() // 关闭 driver()
2. selenium 用来写测试用例 框架Pytest 以及 unittest模块编写测试用例
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
class PythonOrgSearch(unittest.TestCase): //从TestCase类继承是告诉unittest模块这是一个测试用例的方法:
def setUp(self): // setUp方法是初始化的一部分。这个方法将在您将要在这个测试用例类中编写的每个测试函数之前被调用。
self.driver = webdriver.Firefox()
def test_search_in_python_org(self):
driver = self.driver
driver.get("https://www.baidu.com/") // 百度的driver.title 是 百度一下,你就知道
self.assertIn("百度", driver.title)
elem = driver.find_element(By.NAME, "q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
self.assertNotIn("No results found.", driver.page_source)
def tearDown(self): //tearDown方法将在每个测试方法之后被调用。这是一个可以进行所有清理操作的地方
self.driver.close()//quit方法将退出整个浏览器,而close方法将关闭一个选项卡
if __name__ == "__main__":
unittest.main()
3. 其中driver的几个方法
driver.close() //关闭当前页面
driver.quit() //关闭所有由当前测试脚本打开的页面
driver.refresh() //重新加载页面,页面刷新
driver.back() //回到上一个页面
driver.forward() //切换到下一个页面
driver.get(url)方法来打开网页链接
driver.title 获取当前页面的title 属性
4. 定位元素 BY类来定位
find_element(By.ID, "id") // BY的各个属性 ID, NAME, XPATH, LINK_TEXT, PARTIAL_LINK_TEXT, TAG_NAME, CLASS_NAME, CSS_SELECTOR find_element(By.NAME, "name") find_element(By.XPATH, "xpath") find_element(By.LINK_TEXT, "link text") find_element(By.PARTIAL_LINK_TEXT, "partial link text") find_element(By.TAG_NAME, "tag name") find_element(By.CLASS_NAME, "class name") find_element(By.CSS_SELECTOR, "css selector")
详细介绍
ID
//使用方式 login_form = driver.find_element(By.ID, 'loginForm')
<html> // HTML 标签是由尖括号包围关键词 成对出现 开始标签 <body> 结束标签</body> 之间的文本是可见的页面内容 <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> </form> </body> </html>
// <h1> </h1> 之间文本显示为标题 <P> </P>文本显示为段落 <a> 链接 <a href = "URL 网址"> This is a link </a> href 是属性
NAME
username = driver.find_element(By.NAME, 'username')
// 类别是 按键的 NAME
continue = driver.find_element(By.NAME, 'continue')
//XPath支持通过id或name属性定位的简单方法,并通过开辟各种新的可能性来扩展它们,如定位页面上的第三个复选框。
XPATH
login_form = driver.find_element(By.XPATH, "/html/body/form[1]") //绝对路径 login_form = driver.find_element(By.XPATH, "//form[1]") //HTML第一个元素 login_form = driver.find_element(By.XPATH, "//form[@id='loginForm']") //相对路径 加 属性
// 绝对路径 : /开头
相对路径://开头 5种方式 : 1.相对路径+索引 /html/body/form[1] 2.相对路径+属性//form[@id='loginForm']
3.相对路径+通配符定位* //*[@id='loginForm'] 4相对路径+部分属性值定位
以什么开头://*[@*='loginForm'] 从第二个字符串到结尾//*[substring(@id,2)='log‘] 或者是包含部分字符//*[contains@id,'log]'
5.相对路径+部分文本 //span[text{} = "图片搜索"]
TAG_NAME
<html> <body> <h1>Welcome</h1> //标题 尖括号的都是TAG <p>Site content goes here.</p> //段落
<p class="content">Site content goes here.</p>
</body> </html>
heading1 = driver.find_element(By.TAG_NAME, 'h1') //定位标签为h1的元素
CLASS_NAME CSS_SELECTOR
content = driver.find_element(By.CLASS_NAME, 'content')
content = driver.find_element(By.CSS_SELECTOR, 'p.content')
css 定位: 相对路径 通过ID和CLASS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本