0


Selenium使用

一、Selenium的执行原理?

1. 启动浏览器和WebDriver:

from selenium import webdriver

# 启动Chrome浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.example.com")

2.WebDriver与浏览器通信:

WebDriver是Selenium的核心组件,它通过与浏览器建立通信通道来控制浏览器行为。

3. 发送指令至浏览器:

# 寻找页面元素
element = driver.find_element(By.ID, "example_id")

# 模拟用户操作,如输入文本、点击按钮等
element.send_keys("example_text")

# 或者执行JavaScript脚本
driver.execute_script("document.title='New Title'")

4. 获取页面信息:

# 获取页面的URL
current_url = driver.current_url

# 获取页面的标题
page_title = driver.title

# 获取页面的HTML源代码
page_source = driver.page_source

5. 等待机制的应用:

Selenium提供了多种等待方式,包括显式等待、隐式等待等,用于确保页面加载完成或元素可见。

6. 用户自动化脚本的执行:

# 定位元素
element = driver.find_element(By.ID, "example_id")

# 执行用户操作,比如点击按钮
element.click()

7. 浏览器执行自动化脚本:

WebDriver通过与浏览器的通信,实际执行用户编写的自动化脚本,模拟用户在浏览器中的各种行为。

8. 测试结果反馈:

测试框架(如JUnit、TestNG)或其他方式可以用于收集和报告测试结果。

9. 结束测试:

  • 测试完成后,关闭浏览器和WebDriver实例。

二,Selenium常见的七种定位方式

from selenium.webdriver.common.by import By

# 1. 通过ID定位
element_by_id = driver.find_element(By.ID, "your_element_id")

# 2. 通过名称定位
element_by_name = driver.find_element(By.NAME, "your_element_name")

# 3. 通过类名定位
element_by_class_name = driver.find_element(By.CLASS_NAME, "your_class_name")

# 4. 通过标签名定位
element_by_tag_name = driver.find_element(By.TAG_NAME, "b")

# 5. 通过XPath定位
element_by_xpath = driver.find_element(By.XPATH, "//your/xpath/expression")

# 6. 通过CSS选择器定位
element_by_css_selector = driver.find_element(By.CSS_SELECTOR, "your_css_selector")

# 7. 通过链接文本定位(用于链接)
element_by_link_text = driver.find_element(By.LINK_TEXT, "your_link_text")

三,Selenium无法定位的情况(1、普通情况)

1.元素加载延迟

  • 解决方法:使用'WebDriverWait'结合等待条件,确保元素在也买你上加载完毕后在进行定位
  • from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "your_element_id")))

2.动态生成的ID或类名

  • 解决方法:使用包含部分ID或类名的定位方式,或者使用基于其他元素的定位方式
  • # 部分ID或类名element1 = driver.find_element(By.ID, "partial_id")# 使用其他元素关系定位element2 = driver.find_element(By.XPATH, "//div[@class='parent']/div[@class='child']")

3. JavaScript异步加载的元素

  • 解决方式:使用'WebDriverWait'结合条件等待。等待元素的特定条件(如出现。。。可点击)
  • element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "your_element_id")))

4.元素定位方式错误

  • 解决方法:检查使用的定位方式是否正确,例如,确认使用 By.ID 而不是 By.I
  • # 正确的写法element = driver.find_element(By.ID, "your_element_id")# 错误的写法element = driver.find_element(By.I, "your_element_id")

5.页面没有最大化,导致没法定位。

  • 解决方法:
  • # 最大化浏览器窗口driver.maximize_window()

四, Selenium无法定位的情况(2.页面三剑客:)

1.弹框操作:

  • 弹框通常包括警告框、确认框和提示框。在Selenium中,你可以使用 switch_to.alert 来处理这些弹框。
alert = driver.switch_to.alert
alert.dismiss()  # 取消弹框
# 或者
alert.accept()   # 接受弹框

2.框架页操作:

  • 在处理嵌套框架(iframe)时,你可以使用 switch_to.frame 进入框架,然后使用 switch_to.default_content() 返回主文档。
driver.switch_to.frame("frame_id_or_name")
# 在框架内执行操作
driver.switch_to.default_content()  # 返回主文档

3.窗口切换操作:

  • 当一个页面中有多个窗口时,你可以使用 window_handles 获取窗口句柄列表,并使用 switch_to.window 切换到特定窗口。
window_handles = driver.window_handles
driver.switch_to.window(window_handles[1])  # 切换到第二个窗口

五,Selenium处理其他特殊操作

1、处理下拉框

  • Selenium提供select来处理
from selenium.webdriver.support.ui import Select

# 定位下拉框元素
select_element = driver.find_element(By.ID, "dropdown_id")

# 使用Select类创建Select对象
select = Select(select_element)

# 通过可见文本选择选项
select.select_by_visible_text("Option 1")

# 通过索引选择选项(从0开始)
select.select_by_index(1)

# 通过值选择选项
select.select_by_value("option_value")

2.处理多选下拉框:

如果下拉框允许多选,可以使用

select_by_*

系列方法多次选择不同的选项。

from selenium.webdriver.support.ui import Select

# 定位多选下拉框元素
multi_select_element = driver.find_element(By.ID, "multi_dropdown_id")

# 使用Select类创建Select对象
multi_select = Select(multi_select_element)

# 通过可见文本选择选项
multi_select.select_by_visible_text("Option 1")
multi_select.select_by_visible_text("Option 2")

3.处理文件上传:

通过

send_keys()

方法给文件上传输入框发送文件路径来实现文件上传。

file_input = driver.find_element(By.ID, "file_input_id")
file_input.send_keys("path/to/your/file.txt")

4.处理复选框(Checkbox)和单选框(Radio button):

# 处理复选框
checkbox = driver.find_element(By.ID, "checkbox_id")
checkbox.click()

# 处理单选框
radio_button = driver.find_element(By.ID, "radio_id")
radio_button.click()

5. 处理悬浮提示(Tooltip):

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element(By.ID, "element_id")

# 悬停鼠标
ActionChains(driver).move_to_element(element).perform()

六,高级事件处理

1. 模拟键盘按键组合:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

# 打开网页
driver.get("https://example.com")

# 模拟键盘按键组合:Ctrl + A(全选)
search_box = driver.find_element("id", "search-box")
search_box.send_keys(Keys.CONTROL + "a")

2.鼠标悬停点击:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()

# 打开网页
driver.get("https://example.com")

# 鼠标悬停在一个元素上
element_to_hover_over = driver.find_element("id", "hover-element")
hover = ActionChains(driver).move_to_element(element_to_hover_over)
hover.perform()

# 鼠标点击
element_to_click = driver.find_element("id", "click-element")
ActionChains(driver).click(element_to_click).perform()

3.拖拽和释放:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()

# 打开网页
driver.get("https://example.com")

# 找到源元素和目标元素
source_element = driver.find_element("id", "source-element")
target_element = driver.find_element("id", "target-element")

# 拖拽和释放
actions = ActionChains(driver)
actions.drag_and_drop(source_element, target_element).perform()

4.按键组合和操作复杂场景

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

# 打开网页
driver.get("https://example.com")

# 模拟键盘按键组合:Ctrl + Shift + N(在新窗口中打开新标签页)
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL).key_down(Keys.SHIFT).send_keys("n").key_up(Keys.SHIFT).key_up(Keys.CONTROL).perform()

七,三种等待方式

1. 显式等待(Explicit Wait):

  • 显式等待是在代码中明确规定等待条件,直到满足条件或超时为止。它使用 WebDriverWaitexpected_conditions 模块来等待特定条件。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 创建 WebDriverWait 实例,等待最多10秒
wait = WebDriverWait(driver, 10)

# 显式等待元素可见
element = wait.until(EC.visibility_of_element_located((By.ID, "example_id")))

# 执行其他操作
element.click()

2.隐式等待(Implicit Wait

  • 隐式等待是在全局范围内设置等待时间,对整个 WebDriver 对象的生命周期都有效。它在查找元素时等待一定的时间,如果找到元素,就立即执行。
from selenium import webdriver

# 设置隐式等待时间为10秒
driver = webdriver.Chrome()
driver.implicitly_wait(10)

# 打开网页
driver.get("https://example.com")

# 在整个页面寻找元素,如果找到就立即执行
element = driver.find_element(By.ID, "example_id")
element.click()

3. 强制等待(Sleep):

强制等待是通过

time.sleep()

函数在代码中设置一个固定的等待时间。这种方式不太灵活,因为它不会根据实际情况进行调整。

import time

# 强制等待5秒
time.sleep(5)

# 继续执行其他操作

本文转载自: https://blog.csdn.net/weixin_50631440/article/details/136021051
版权归原作者 六便士_forever 所有, 如有侵权,请联系我们删除。

“Selenium使用”的评论:

还没有评论