Selenium常用参数和操作

  • Selenium中常用的第三方模块
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions  
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains  # 动作链
from selenium.webdriver.common.keys import Keys  # 键盘操作
from selenium.common import exceptions # 异常处理
  • 禁用显示“Chrome 正在受到自动软件的控制”信息栏
options = ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
  • 禁用显示自动化扩展程序提示框
options.add_experimental_option('useAutomationExtension', False)
  • 禁止显示保存密码提示框
prefs = {"credentials_enable_service": False, "profile.password_manager_enabled": False}
options.add_experimental_option("prefs", prefs)
  • 禁用自动化控制特性,避免被网站检测到
options.add_argument('--disable-blink-features=AutomationControlled')
  • 无头浏览器
options.add_argument('--headless') # 设置无头模式
options.add_argument('--disable-gpu') # 禁用GPU加速
  • 避免被浏览器检测出来使用了Selenium
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
  • 修改浏览器中的navigator对象,使网站检测不到Selenium
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
driver.execute_script(script)
  • 禁用图片加载
prefs = {"profile.managed_default_content_settings.images": 2}
options.add_experimental_option("prefs", prefs)
  • 全部代码执行完后,指定浏览器仍保持打开状态
options.add_experimental_option("detach", True)
  • 滚动条滚到最底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 或者下面这句也一样
# driver.execute_script('document.documentElement.scrollTop = document.documentElement.scrollHeight')
  • 将当前上下文切换到指定的iframe或frame中
# 切换到指定iframe或frame中
driver.switch_to.frame(frame_reference) # frame_reference可以是iframe或frame的索引或id、name属性
......
......
# 切换回主文档
driver.switch_to.default_content()
  • 浏览器切换到最新打开的窗口
driver.switch_to.window(driver.window_handles[-1])
  • 浏览器切换到第一个打开窗口
driver.switch_to.window(driver.window_handles[0]) 
  • 滑块操作
# 定位滑块
slider = driver.find_element(By.ID, 'nc_1_n1z')
# 实例化动作链
action = ActionChains(driver)
# 点击且长按该滑块
action.click_and_hold(slider).perform()
# 用一个for循环进行拖动
for i in range(5):
    action.move_by_offset(70, 0).perform()  # 向右拖动,一次拖动70个像素点
    sleep(0.3)
action.pause(0.5).release().perform()  # 停顿0.5秒后释放鼠标
  • 通过JavaScript代码实现点击操作(如果直接点击会报错时就推荐用这种)
# 定位要点击的元素
clic = li.find_element(By.CSS_SELECTOR, '.job-card-left')
# 执行点击操作
driver.execute_script('arguments[0].click()', clic)
  • 键盘回车
# 找到某个文本框元素
input_box = driver.find_element_by_xpath("//input[@name='input-box']")
# 在文本框中输入文本,然后按下回车键
input_box.send_keys("Hello, World!")
input_box.send_keys(Keys.RETURN)

后续会继续补充…

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Selenium参数化是指在使用Selenium进行自动化测试时,通过传递不同的参数来执行多个测试用例。这种方法可以减少代码的重复性,提高测试效率。 在Selenium中,可以使用各种编程语言(如Python、Java等)来实现参数化。下面以Python为例,介绍一种常用参数化方法: 1. 导入所需的库和模块: ```python from selenium import webdriver import unittest import time import ddt ``` 2. 定义测试类并使用ddt装饰器: ```python @ddt.ddt class ParameterizedTestCase(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() def tearDown(self): self.driver.quit() ``` 3. 使用@ddt.data和@ddt.unpack进行参数化: ```python @ddt.data(('Username1', 'Password1'), ('Username2', 'Password2')) @ddt.unpack def test_login(self, username, password): self.driver.get('https://www.example.com/login') time.sleep(2) self.driver.find_element_by_id('username').send_keys(username) self.driver.find_element_by_id('password').send_keys(password) self.driver.find_element_by_id('login-btn').click() time.sleep(2) # 进行断言等其他操作 ``` 4. 运行测试用例: ```python if __name__ == '__main__': unittest.main() ``` 上述代码中,`test_login`方法被设置为参数化的测试用例,每次执行时会传入不同的`username`和`password`参数值。通过在`@ddt.data`装饰器中添加不同的参数组合,可以实现多个测试用例的执行。 注意:使用参数化时,需要保证每个参数组合的测试用例能够独立运行,以避免测试数据的干扰。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值