首页 > 其他分享 >Web自动化测试-1

Web自动化测试-1

时间:2024-08-20 22:51:07浏览次数:9  
标签:Web webdriver url driver value 测试 自动化 import id

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

相关文章

  • 网站自动化锚文本的实现逻辑
    锚文本,‌即超链接的文本部分,‌它在网页中扮演着至关重要的角色。‌通过点击锚文本,‌用户可以方便地在网页间进行跳转,‌从而极大地提升了用户体验。‌同时,‌在搜索引擎优化(‌SEO)‌领域,‌锚文本也发挥着不可忽视的作用。‌搜索引擎会通过分析锚文本的内容,‌来判断链接页面的主......
  • .net core web 启动过程(6)-ServiceProvider
    1 [MemberNotNull(nameof(_appServices))]privatevoidInitializeServiceProvider(){varservices=newServiceCollection();PopulateServiceCollection(services,_hostBuilderContext!,_hostingEnvironment!,......
  • 合同等文档的比对实现测试
    记录一下合同等文档的比对测试,以下是实现docx格式与txt格式的内容对比结果图,其中图1为docx格式,是房屋租赁合同的内容对比结果;图2是纯文本txt格式的内容对比结果。图1图2......
  • [20240818]测试21c下sqlplus show recyclebin的小问题2.txt
    [20240818]测试21c下sqlplusshowrecyclebin的小问题2.txt--//以前测试过,链接[20210722]sqlplus下showrecycebin的小问题.txt--//注:recycebin拼写错误应该是recyclebin.--//这个问题当时也是浪费了大量实际,我记忆遇到问题时是上午,执行showrecyclebin;[注空格+;],linux......
  • 《黑神话:悟空》首发硬件测试
    一、前言2020年8月,《黑神话:悟空》发布了首支预告片,迅速在游戏游戏圈内引起了巨大的轰动。历经4年的等待,今天这款游戏终于正式上线。游戏解禁之后不到2个小时,Steam在线人数就突破了140万,超越Top2~10在线游戏人数总和。在此之前,国内还从来没有哪款单机游戏能像《黑神话:悟空》这......
  • Web端OA办公后台管理系统(使用AxureRP设计)思路与效果分享
    本期带来一套OA办公后台管理系统(办公一体化)的设计分享。本次的作品设计,使用AxureRP软件。一套实用的后台OA系统,一定是功能强大、能覆盖常用功能的。本次分享的系统,包含组织、员工管理、考勤、薪资、社保公积金、绩效、招聘、审批、会议室预定、车辆申请、新闻发布、公告管理、合......
  • 2024暑假集训测试29
    前言比赛链接。今上午在家打的,下午回的学校,话说啥时候改成\(7\)点开始了?T1是板子但是没打过标记永久化,想了一段时间想起树状数组维护区间求和操作于是用主席树实现了这个,赛时T1不给大样例所以调了挺长时间才放心;T2想了一会儿没想出来就先打T3了,T3想了一会儿胡了个......
  • 性能测试理论基础一
    一、性能测试概念1.为什么程序会有性能问题,性能问题是怎么出现的?2.性能测试和功能测试的区别是什么?3.核心性能指标:吞吐量QPS/TPS4.核心性能指标:并发量5.核心性能指标:响应时间1.性能和功能的区别功能角度:验证程序是否满足功能性需求(有没有功能,能不能用)性能:多角度分析......
  • 性能测试中如何确定TPS和并发数
    性能测试中,最难的就是需求不明,无法获取到有效的需求指标,造成测试工作无法推进。所以,我给大家一个预估TPS和并发数的公式。1、 计算平均的并发用户数:C=nL/T 公式1中:c是平均的并发用户数;n是loginsession的数量;L是loginsession的平均使用时长;T是考察的时间段长度。2、并发用户......
  • LLM的API KEY获取和测试
    openaiopenai国内不能访问,只能通过第三方渠道访问,以F2API为例获取APIKEY地址:https://f2api.com/login测试APIKEY是否可用fromlangchain_openaiimportChatOpenAIllm=ChatOpenAI(openai_api_base="https://api.f2gpt.com",openai_api_key="******")res=llm.i......