Web自动化测试-1

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")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值