Python+Selenium自动化测试框架--利用css_selector(CSS)定位元素

目录

前言

一、通过 class 属性定位:

二、通过 id 属性定位:

三、通过标签名定位:

四、通过父子关系定位:

五、通过属性定位:

六、组合定位:


前言

本章主要学习利用css_selector定位元素,通过百度搜索编辑框进行学习

CSS选择器的常见语法

 

find_element_by_css_selector()方法用于 CSS 语言定位元素

 Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

 

一、通过 class 属性定位:

 1 # coding=utf-8
 2 from selenium import webdriver
 3 import time
 4 
 5 driver = webdriver.Chrome()
 6 driver.maximize_window()
 7 driver.implicitly_wait(5)
 8 
 9 driver.get("http://www.baidu.com")
10 try:
11     driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")
12     driver.find_element_by_css_selector(".bg.s_btn").click()
13     time.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Python+Selenium+Pytest+Allure的自动化测试工程框架示例,包括一些公共的代码: ## 工程结构 ``` - project/ - tests/ - test_login.py - pages/ - base_page.py - login_page.py - utils/ - config.py - driver.py - logger.py - reports/ - requirements.txt - pytest.ini ``` ## requirements.txt ``` selenium==3.141.0 pytest==6.2.4 pytest-allure-adaptor==1.7.0 ``` ## pytest.ini ``` [pytest] log_cli = true log_cli_level = INFO log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s) log_file = logs/test.log log_file_level = INFO log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s) markers = smoke: Run the smoke test cases regression: Run the regression test cases ``` ## utils/config.py ```python import os PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) DRIVER_PATH = os.path.join(PROJECT_ROOT, 'drivers/chromedriver') BASE_URL = 'http://example.com' USERNAME = 'testuser' PASSWORD = 'testpass' ``` ## utils/driver.py ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options from utils.config import DRIVER_PATH def get_driver(): options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') driver = webdriver.Chrome(executable_path=DRIVER_PATH, options=options) return driver ``` ## utils/logger.py ```python import logging import os from utils.config import PROJECT_ROOT def get_logger(name): logger = logging.getLogger(name) logger.setLevel(logging.INFO) log_dir = os.path.join(PROJECT_ROOT, 'logs') if not os.path.exists(log_dir): os.makedirs(log_dir) log_file = os.path.join(log_dir, 'test.log') formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)') file_handler = logging.FileHandler(log_file) file_handler.setLevel(logging.INFO) file_handler.setFormatter(formatter) console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.addHandler(console_handler) return logger ``` ## pages/base_page.py ```python from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from utils.driver import get_driver from utils.config import BASE_URL class BasePage: def __init__(self): self.driver = get_driver() self.wait = WebDriverWait(self.driver, 10) self.base_url = BASE_URL def open(self, url=None): if url is None: url = self.base_url self.driver.get(url) def find_element(self, locator): return self.wait.until(EC.presence_of_element_located(locator)) def find_elements(self, locator): return self.wait.until(EC.presence_of_all_elements_located(locator)) def click(self, locator): element = self.find_element(locator) element.click() def input(self, locator, text): element = self.find_element(locator) element.clear() element.send_keys(text) def close(self): self.driver.quit() ``` ## pages/login_page.py ```python from selenium.webdriver.common.by import By from pages.base_page import BasePage from utils.config import USERNAME, PASSWORD class LoginPage(BasePage): username_locator = (By.NAME, 'username') password_locator = (By.NAME, 'password') submit_locator = (By.CSS_SELECTOR, 'button[type="submit"]') def login(self, username=USERNAME, password=PASSWORD): self.open() self.input(self.username_locator, username) self.input(self.password_locator, password) self.click(self.submit_locator) ``` ## tests/test_login.py ```python import allure import pytest from pages.login_page import LoginPage from utils.logger import get_logger logger = get_logger(__name__) @allure.feature('Login') class TestLogin: @allure.title('Test login with correct username and password') @allure.severity(allure.severity_level.NORMAL) @pytest.mark.smoke def test_login_success(self): logger.info('Test login with correct username and password') LoginPage().login() assert 'Dashboard' in LoginPage().driver.title @allure.title('Test login with incorrect username or password') @allure.severity(allure.severity_level.NORMAL) @pytest.mark.regression def test_login_failure(self): logger.info('Test login with incorrect username or password') LoginPage().login(username='invalid', password='invalid') assert 'Login' in LoginPage().driver.title ``` 使用命令 `pytest --alluredir=./reports` 运行测试,使用命令 `allure serve ./reports` 查看测试报告。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值