1.前置配置
1.1安装selenium
在PyCharm的终端上输入命令:pip install selenium即可安装
使用pip show selenium来查看
1.2浏览器的选择与配置
浏览器 选择Edge,且在Edge中添加SelectorsHub - XPath Helper插件
添加的具体操作请找相关资料
以下从左到右分别是测试界面,控制台和SelectorsHub - XPath Helper
2.selenium的八个种定位方式
定位方式有id,name,class_name,tag_name,link_text,partial_link_text,xpath和css
其中xpath与css最重要也最常用、最好用
2.1id属性定位
id定位的局限与name,class_name,link_text和partial_link_text一样很大
如果测试的网页中没有id属性,那么id定位就废了,其他的也一样
id定位与name定位几乎是同一种方式,只不过id“被认为”有唯一性,id的唯一性不是规则,而是规格,不具备强制性
以下是id的运用
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 获取浏览器对象
driver = webdriver.Edge()
# 打开url
url = "http://localhost:8080/login.jsp"
driver.get(url)
# id往往是唯一的
driver.find_element(By.ID, value="username").send_keys("zhangsan")
driver.find_element(By.ID, value="password").send_keys("123")
sleep(5)
driver.quit()
运行代码后,会自动访问url中的地址,并通过id定位来自动赋值,五秒钟后自动关闭
2.2name属性定位
与id不同的是,规格上也可以重复
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 获取浏览器对象
driver = webdriver.Edge()
# 打开url
url = "http://localhost:8080/login.jsp"
driver.get(url)
# 用name的方法与id的方法几乎相同
driver.find_element(By.NAME, value="username").send_keys("zhangsan")
driver.find_element(By.NAME, value="password").send_keys("123")
sleep(5)
driver.quit()
2.3class_name定位
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 获取浏览器对象
driver = webdriver.Edge()
# 打开url
url = "http://localhost:8080/login.jsp"
driver.get(url)
# 我没有class_name类型的例子
# driver.find_element(By.CLASS_NAME, value="username").send_keys("zhangsan")
# driver.find_element(By.CLASS_NAME, value="password").send_keys("123")
sleep(5)
driver.quit()
2.4 tag_name
tag_name为标签定位方法
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 获取浏览器对象
driver = webdriver.Edge()
# 打开url
url = "http://localhost:8080/login.jsp"
driver.get(url)
# 百度页面的输入框是<input type="text" class="s_ipt" name="wd" id="kw"...
# 而按钮是<input type="submit" value="百度一下" id="su"...
# tag_name通过input定位,也就是标签名来定位,如果存在多个相同名字的标签则返回第一个
driver.find_element(By.TAG_NAME, value="input").send_keys("zhangsan")
# driver.find_element(By.TAG_NAME, value="input").send_keys("123")
# 如果使用两个TAG_NAME,则只会在第一个input中输入zhangsan123
sleep(5)
driver.quit()
2.5link_text与partial_link_text
link_text与partial_link_text的差别在于partial模糊化,他们都是用来定位超链接
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 获取浏览器对象
driver = webdriver.Edge()
# 打开url
url = "http://localhost:8080/login.jsp"
driver.get(url)
# # LINK_TEXT全部匹配,value里的值一个不能少
# driver.find_element(By.LINK_TEXT, value="没有账号?点击注册").click()
# PARTIAL_LINK_TEXT模糊匹配,value可以不写完全部(需要使用唯一代表词,如果不唯一,则返回满足条件的第一个值)
driver.find_element(By.PARTIAL_LINK_TEXT, value="没有账号").click()
sleep(3)
driver.quit()
2.6xpath
相关的笔记在代码中
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from playwright.sync_api import sync_playwright
# xPath(xml Path)是基于路径
# xpath的定位方式为,路径定位,利用元素属性定位,属性与逻辑结合定位,层级与属性结合定位
# 路径定位:定位到某街道
# 利用元素属性定位:定位到某街道一个叫张三的人
# 属性与逻辑结合定位:定位到某街道一个叫张三且38岁的人
# 层级与属性结合定位:定位到某街道一个叫张三且他爸叫张二
# 路径也分绝对路径与相对路径
# 获取浏览器对象
# with sync_playwright() as p:
# browser = p.chromium.launch(headless=False)
driver = webdriver.Edge()
url = "http://localhost:8080/login.jsp"
driver.get(url)
# 绝对路径
driver.find_element(By.XPATH, value="/html/body/div/form/p[1]/input").send_keys("zhangsan")
sleep(3)
# # 相对路径
# driver.find_element(By.XPATH, value="//input[@id='password']").send_keys("123")
# # 逻辑结合
# driver.find_element(By.XPATH, value="//input[@id='password' and @name='password']").send_keys("123")
# 层级结合
# //input会定位到四个,//p/input只会定义到两个
driver.find_element(By.XPATH, value="//p/input[@id='password']").send_keys("123")
sleep(3)
driver.quit()
# 扩展
# 文本内容是xxx的元素
# //*[text()='用户名:']
# 一般用于p和a标签
# 属性中含有xxx的元素
# //*[contains(@type,'password')]
# driver.find_element(By.XPATH, value="//*[contains(@type,'password')]").send_keys("123")
# 属性以xxx开头的元素
# //*[starts-with(@id,'pass')]
# driver.find_element(By.XPATH, value="//*[starts-with(@id,'pass')]").send_keys("123")
2.7css
相关的笔记在代码中
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# css定位方式为重点,它比xPath还牛
# css有五种选择器,id,class,元素,属性和层级选择器
# id用#id,条件:元素必须有id属性
# class用.class,条件:元素必须有class属性
# 元素选择有p,span,input等
# 属性选择[name='password']
# 层级body input与p>input的区别,空格中间可以有很多层,而箭头表示input的上级,故,这里的p不能换成body
# p标签如果为<p id="p1>...</p>,则可使用之变为p[id='p1']>input
driver = webdriver.Edge()
url = "http://localhost:8080/login.jsp"
driver.get(url)
# id
driver.find_element(By.CSS_SELECTOR, value="#username").send_keys("zhangsan")
# 属性
driver.find_element(By.CSS_SELECTOR, value="[name='password']").send_keys("123")
# 元素
driver.find_element(By.CSS_SELECTOR, value="input[3]").click()
sleep(3)
driver.quit()
# 属性的扩展
# [id^='p'] 属性以p字母开头的元素
# [id$='e'] 属性以e字母结束的元素
# [id*='w'] 属性包含w字母的元素
# 例如
# driver.find_element(By.CSS_SELECTOR, value="[id$='e']").send_keys("zhangsan")
# driver.find_element(By.CSS_SELECTOR, value="[id^='p'] ").send_keys("123")
标签:Web,webdriver,url,driver,value,测试,自动化,import,id
From: https://blog.csdn.net/bianyijiqi/article/details/141370086