selenium库的基本使用

selenium是一个基于浏览器自动化的模块,使用webdriver可以实现桌面网页测试自动化。

官方文档:https://www.selenium.dev/documentation/

WebDriver:https://www.selenium.dev/zh-cn/documentation/webdriver/browser_manipulation/

安装流程

https://www.selenium.dev/zh-cn/documentation/getting_started/installing_browser_drivers/

  1. 安装selenium,pip install selenium
  2. 下载chrome对应版本的浏览器驱动,https://npm.taobao.org/mirrors/chromedriver
  3. 解压缩后将chromedriver放入python解释器对应文件夹。

使用流程

# 启动Chrome
from selenium.webdriver import Chrome

# 1. 创建浏览器对象
web = Chrome()

# 2. 打开一个网址
web.get("https://www.baidu.com/")

操控浏览器

浏览器导航栏 Browser navigation

1. 打开网址
driver.get("https://selenium/dev")

2. 获取当前URL
driver.current_url

3. 后退按钮
driver.back()

4. 前进按钮
driver.forward()

5. 刷新
driver.refresh()

6. 获取当前页面标题
driver.title

窗口和标签页 Windows and tabs

WebDriver 没有区分窗口和标签页。如果你的站点打开了一个新标签页或窗口,Selenium 将允许您使用窗口句柄来处理它。 每个窗口都有一个唯一的标识符,该标识符在单个会话中保持持久性。你可以使用以下方法获得当前窗口的窗口句柄:

driver.current_window_handle

1.切换窗口或标签
Selenium 4 提供了新的api NewWindow,在创建一个新的窗口或标签页时会自动切换

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

# 启动驱动程序
with webdriver.Chrome() as driver:
    # 打开网址
    driver.get("https://www.baidu.com")

    # 设置等待
    wait = WebDriverWait(driver, 10)

    # 存储原始窗口的 ID
    original_window = driver.current_window_handle

    # 检查一下,我们还没有打开其他的窗口
    assert len(driver.window_handles) == 1

    # 单击在新窗口中打开的链接
    driver.find_element(By.LINK_TEXT, "地图").click()

    # 等待新窗口或标签页
    wait.until(EC.number_of_windows_to_be(2))

    # 循环执行,直到找到一个新的窗口句柄
    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break

    # 等待新标签页完成加载内容
    wait.until(EC.title_is("百度地图"))
    
    
2. 创建新的窗口或标签页并切换
# 打开新标签页并切换到新标签页
driver.switch_to.new_window('tab')

# 打开一个新窗口并切换到新窗口
driver.switch_to.new_window('window')

3. 关闭窗口或标签页
#关闭标签页或窗口
driver.close()

#切回到之前的标签页或窗口
driver.switch_to.window(original_window)

4. 退出浏览器
driver.quit()

部分测试框架提供了一些方法和注释,可以在测试结束后放入teardown()方法中。
# ① unittest teardown
# https://docs.python.org/3/library/unittest.html?highlight=teardown#unittest.TestCase.tearDown
def tearDown(self):
    self.driver.quit()

# ② try/finally
try:
    #WebDriver code here...
finally:
    driver.quit()

# ③ with
with webdriver.Firefox() as driver:
  # WebDriver code here...

# WebDriver will automatically quit after indentation

定位元素

https://www.selenium.dev/zh-cn/documentation/webdriver/locating_elements/

find_element_by_

定位器 Locator 描述
class name 定位class属性与搜索值匹配的元素(不允许使用复合类名)
css selector 定位 CSS 选择器匹配的元素
id 定位 id 属性与搜索值匹配的元素
name 定位 name 属性与搜索值匹配的元素
link text 定位link text可视文本与搜索值完全匹配的锚元素
partial link text 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。
tag name 定位标签名称与搜索值匹配的元素
xpath 定位与 XPath 表达式匹配的元素
posted @ 2021-08-30 14:15  ikventure  阅读(245)  评论(0)    收藏  举报