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