参考链接
- selenium 官网:
https://seleniumhq.github.io/selenium/docs/api/py/
第一个录制出来的代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestTesta():
def setup_method(self, method):
# 打开浏览器
self.driver = webdriver.Firefox()
def teardown_method(self, method):
# 退出浏览器
self.driver.quit()
def test_testa(self):
# 打开网址
self.driver.get("https://ceshiren.com/")
# 设置浏览器尺寸
self.driver.set_window_size(1421, 840)
# 点击所有分类
self.driver.find_element(By.LINK_TEXT, "所有分类").click()
不建议使用录制出来的代码
1、录制的代码,冗余的代码太多,需要改造
2、没有加入断言,需要手动添加
等待方式
1、强制等待
time.sleep(second)
,死等,直到设置的 second 秒 数结束
2、隐式等待
self.driver.implicitly_wait(5)
一般编写测试用例的时候都要加入隐式等待。
一般是在创建完driver 之后立刻设置隐式等待,会存在 driver 的整个生命周期当中。
每次查找元素的时候会动态的等待元素的出现 。
3、显式等待
在某一个元素上动态的查找。
参考代码
def test_weixin(self):
self.driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx?from=myhome")
# time.sleep(10)
# print(self.driver.get_cookies())
# 获取当时的cookie
cookies = [{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False, 'value': '1688851905935585'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False, 'value': '1688851905935585'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False, 'value': '1970325054155915'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False, 'value': 'a6117131'}, {'domain': 'work.weixin.qq.com', 'expiry': 1599668856, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/', 'secure': False, 'value': '2f3srko'}, {'domain': '.qq.com', 'expiry': 1599723726, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.678795865.1599637322'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False, 'value': '3697355392520199'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False, 'value': 'IiwmHmbRQC3UgqmekvGcsr4MXoEQ7JHkRJxXLp6O6EJVsPqpC7XW76-bnVayBJEn'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False, 'value': 'direct'}, {'domain': '.qq.com', 'expiry': 1599637381, 'httpOnly': False, 'name': '_gat', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.qq.com', 'expiry': 1662709326, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.1244331351.1599637322'}, {'domain': '.work.weixin.qq.com', 'expiry': 1631173320, 'httpOnly': False, 'name': 'wwrtx.c_gdpr', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False, 'value': 'TNtbVadLB1jEVX113Ypx3MzpTcRKBbZb27VmkZdFYA9KMtKb8HNFRHbbjFyOWu-YSq9QCYhbW8Pl5hbQpyU3LugnMhfU6ok9DsaryD9qj5VeB9pPs3oh24uEwH9Mf-inn_IjOFJLGd6VMflPPo21KQ-x8Uw_u_CxrAc1wpSJ4EaQ5D0RmOCKwesUtFHOoL6fMIGtqsaOiE_fJ-68puCQA-1W6Jzg29qmn8UJ8eLaCgr7s0yhl7VXltWiGI6niOqEufJms4bv4VziVFs8GwQCrg'}, {'domain': '.work.weixin.qq.com', 'expiry': 1602229329, 'httpOnly': False, 'name': 'wwrtx.i18n_lan', 'path': '/', 'secure': False, 'value': 'zh-cn'}]
for cookie in cookies:
self.driver.add_cookie(cookie)
self.driver.refresh()
# 使用find_element 方法定位元素,如果页面上有多个相同属性的元素,只能定位到第一个元素
# self.driver.find_element(By.CSS_SELECTOR, ".index_service_cnt_item_title")
# 使用 find_elements 方法 会返回一个元素列表
element = self.driver.find_elements(By.CSS_SELECTOR, ".index_service_cnt_item_title")[1]
element.click()
self.driver.find_element(By.ID, "js_upload_file_input").\
send_keys("/Users/juanxu/Downloads/mydata.xlsx")
filename = self.driver.find_element(By.ID, "upload_file_name").text
assert "mydata.xlsx" == filename
time.sleep(10)