PYTHON UI自动化,selenium第一节,登录

'''
1/安装Selenium库:使用pip工具来安装Selenium库。在命令行中输入以下命令:pip install selenium/requests
pip常用基础命令
查看已经安装的第三方库:pip list
直接安装库:pip install 库名
指定版本安装:pip install robotframework==2.8.7
卸载已安装的库:pip uninstall requests
更新某个库: pip install -U requests
查看pip版本:pip --version
pip工具升级:python -m pip install --upgrade pip
2/安装Chrome浏览器:Selenium需要与Chrome浏览器一起使用,因此你需要在你的计算机上安装Google Chrome浏览器。
下载ChromeDriver:为了与Chrome浏览器进行通信,你需要下载一个名为ChromeDriver的驱动程序。请确保下载与你的Chrome浏览器版本相匹配的ChromeDriver。
你可以在以下链接找到适合你系统的ChromeDriver版本:https://registry.npmmirror.com/binary.html?path=chromedriver/
3/将ChromeDriver添加到系统路径:下载完成后,将ChromeDriver解压到一个文件夹中,并将该文件夹的路径添加到系统的环境变量PATH中。
这样你就可以在任何位置运行ChromeDriver了。
4/确保网站URL正确:确保你访问的网站URL是正确的。在这个例子中,它指向了一个本地服务器上的地址
"http://localhost/patient_management"。如果你正在测试一个远程服务器上的网站,你需要更改URL以匹配正确的地址。
5/检查元素ID是否正确:确保你在代码中使用的元素ID与网页上的实际元素ID匹配。例如,find_element_by_id(
    "patient_name")、find_element_by_id("patient_age")
和find_element_by_id("patient_gender")
等。如果这些ID不正确,你需要根据实际网页结构进行调整。
'''

from selenium import webdriver
from selenium.common import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import logging
import requests
import time
# 创建WebDriver实例
driver = webdriver.Chrome()
# 打开登录页面
driver.get("http://110.42.248.235:86/#/")
# 创建等待对象
wait = WebDriverWait(driver, 10)
'''在Web自动化测试中,定位页面上的元素是自动化操作的基础。
Selenium提供了多种元素定位方法,主要包括八大定位方式:
id、name、class name、tag name、link text、partial link text、XPath和CSS定位。
每种定位方式都有其独特的应用场景和优缺点,
下面详细介绍这些定位方法及其使用场景:
ID定位
使用场景:当元素具有唯一的ID属性时,这是最直接和高效的定位方式。
优点:定位速度快,准确性高,因为ID属性在一个HTML文档中是唯一的。
示例代码:
element = driver.find_element(By.ID, "element_id")
Name定位
使用场景:适用于具有name属性的元素,通常用于表单元素如 < input >、 < select > 等。
优点:简单易用,尤其适用于表单元素的定位。
缺点:name属性可能不是唯一的,需要确认其唯一性。
示例代码:
element = driver.find_element(By.NAME, "element_name")
ClassName定位
使用场景:通过元素的class属性值定位,常用于具有特定样式的元素。
优点:适用于具有特定样式或类别的元素。
缺点:class属性可能不是唯一的,也可能包含多个类名,需选择具唯一性的类名。
示例代码:
elements = driver.find_elements(By.CLASS_NAME, "element_class")
TagName定位
使用场景:通过标签名称定位,适用于同一标签类型的所有元素。
优点:可以快速定位到所有指定标签的元素。
缺点:返回的是符合条件的所有元素,可能需要进一步筛选。
示例代码:
elements = driver.find_elements(By.TAG_NAME, "element_tag")
LinkText定位
使用场景:通过完全匹配的链接文本定位元素,常用于 < a > 标签。
优点:直观易懂,适用于导航链接。
缺点:需要完全匹配链接文本,一个小差别都可能导致定位失败。
示例代码:
element = driver.find_element(By.LINK_TEXT, "link_text")
PartialLinkText定位
使用场景:通过部分匹配的链接文本定位元素,灵活适用于包含特定文字的链接。
优点:灵活性强,适用于包含特定文字的链接。
缺点:可能定位到多个符合条件的元素,需要进一步处理。
示例代码:
elements = driver.find_elements(By.PARTIAL_LINK_TEXT, "part_of_link_text")
XPath定位
使用场景:通过XML路径语言进行元素定位,可以非常灵活地定位元素。
优点:功能强大,可以通过路径、属性、逻辑等进行复杂定位。
缺点:表达式较为复杂,性能相对较低。
示例代码:
element = driver.find_element(By.XPATH, "//div[@class='example_class']/a")
CSS定位
使用场景:通过CSS选择器进行元素定位,适用于大多数HTML元素。
优点:定位速度快,语法简洁明了。
缺点:不支持逻辑运算符,对于某些复杂定位不如XPath灵活。
示例代码:
element = driver.find_element(By.CSS_SELECTOR, "#example_id .example_class")
'''

try:
    username_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div/div/form/div/div[1]/input"))
    )
    username_input.send_keys("admin")
except TimeoutException:
    print("等待超时,未找到元素")
'''

# 定位用户名输入框并输入用户名
username_input = driver.find_element_by_XPATH("/html/body/div/div/form/div/div[1]/input")
time.sleep(5)  # 等待2秒钟
username_input.send_keys("admin")
time.sleep(2)  # 等待2秒钟
'''
try:
    # 使用WebDriverWait等待最多10秒,直到找到密码输入框
    password_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/form/div/div[2]/input"))
    )
    # 向密码输入框发送密码
    password_input.send_keys("12345678")
except NoSuchElementException:
    print("未找到密码输入框")
try:
    login_button = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/form/div/div[3]/div/button"))
    )
    login_button.click()
except TimeoutException:
    print("登录按钮未找到或加载超时")
# 等待登录成功,例如等待页面跳转或者某个特定元素出现
wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/section/aside/ul/li[2]/span")))
#打印登陆成功,写一个日志,并记录请求响应
# 打印登录成功信息

print("登录成功")
# 配置日志
logging.basicConfig(filename="app.log", level=logging.INFO, format='%(asctime)s %(message)s')
# 写日志
logging.info("登录成功")
# 发送请求
response = requests.get("http://110.42.248.235:86/#/")
# 打印请求响应
print(response.text)
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值