当前位置: 首页 > news >正文

web自动化测试(selenium.webdriver)

selenium

在这里插入图片描述
在这里插入图片描述
https://www.selenium.dev/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://www.selenium.dev/documentation/en/webdriver/driver_requirements/
https://npm.taobao.org/mirrors/chromedriver/
https://chromedriver.storage.googleapis.com/index.html

在这里插入图片描述

Selenium IDE用例录制

在这里插入图片描述
在这里插入图片描述
https://github.com/SeleniumHQ/selenium-ide/releases
以上都无法下载
看这儿:https://www.likecs.com/show-205155234.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

selenium用例编写

在这里插入图片描述
小白入门:http://selenium-python.readthedocs.io/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
class TestBaidu:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        # 隐式等待 类似于异步
        self.driver.implicitly_wait(5)
    def teardown(self):
        # 退出所有标签
        self.driver.quit()
    def test_baidu(self):
        self.driver.get('http://www.baidu.com')
        self.driver.find_element(by=By.ID,value='kw').send_keys('爱玛科技')
        self.driver.find_element(by=By.ID,value='su').click()
        self.driver.find_element(by=By.LINK_TEXT,value='爱玛科技[603529]A股实时行情 - 百度股市通').click()
        sleep(2)

selenium三种等待方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


class Test_wait:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_579fb540a49b4b5fbb41cb802ab375c1')

    def test_wait(self):
        self.driver.find_element(by=By.LINK_TEXT, value='京东家电').click()

        # 一点要穿一个参数进去 无论有没有使用
        # def wait(x):
        #     return len(self.driver.find_element(by=By.CLASS_NAME, value='lc-imgarea-base__links-item')) >= 4
        # WebDriverWait(self.driver,8).until(wait)

        WebDriverWait(self.driver,6).until(expected_conditions.element_to_be_clickable([By.CSS_SELECTOR,'.logo']))
        self.driver.find_element(by=By.LINK_TEXT, value='企业购').click()

web控件定位与常见操作

selenium点击与输入
在这里插入图片描述

Xpath

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Css Selector

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

web控件的交互进阶

在这里插入图片描述
在这里插入图片描述

ActionChains

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import pytest
from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By

from time import sleep
class TestAction:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)
        self.driver.maximize_window()

    def teardown(self):
        self.driver.quit()
        print('结束了!')

    def test_case_click(self):
        self.driver.get("http://sahitest.com/demo/clicks.htm")
        element_click = self.driver.find_element(by=By.XPATH,value="//input[@value='click me']")
        element_dbl = self.driver.find_element(by=By.XPATH,value="//input[@value='dbl click me']")
        element_rcm = self.driver.find_element(by=By.XPATH,value="//input[@value='right click me']")
        action = ActionChains(self.driver)
        action.click(element_click)
        action.double_click(element_dbl)
        action.context_click(element_rcm)
        action.perform()
        sleep(3)

    # @pytest.mark.skip
    def test_case_move(self):
        self.driver.get('http://www.baidu.com')
        ele = self.driver.find_element(by=By.ID,value="s-usersetting-top")
        action = ActionChains(self.driver)
        action.move_to_element(ele).perform()
        sleep(3)

    def test_case_dragdrop(self):
        self.driver.get('http://sahitest.com/demo/dragDropMooTools.htm')
        drag_element = self.driver.find_element(by=By.XPATH,value='//*[@id="dragger"]')
        drop_element = self.driver.find_element(by=By.XPATH,value='/html//div[3]')
        drop_element2 = self.driver.find_element(by=By.XPATH, value='/html//div[5]')
        drop_element3 = self.driver.find_element(by=By.XPATH, value='/html//div[2]')
        action = ActionChains(self.driver)
        action.drag_and_drop(drag_element,drop_element).perform()
        action.click_and_hold(drag_element).release(drop_element2).perform()
        action.click_and_hold(drag_element).move_to_element(drop_element3).release().perform()
        sleep(3)

    def test_case_keys(self):
        self.driver.get('http://sahitest.com/demo/label.htm')
        ele = self.driver.find_element(by=By.XPATH,value='/html/body/label[1]/input')
        ele.click()
        action = ActionChains(self.driver)
        action.send_keys("Liang")
        action.send_keys(Keys.SPACE).pause(1)
        action.send_keys("XiaoQii").pause(1)
        action.send_keys(Keys.BACKSPACE).perform()
        sleep(3)


if __name__ == '__main__':
    pytest.main()

TouchAction

在这里插入图片描述
https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_action.html
在这里插入图片描述

from selenium import webdriver
# 现在没有这个TouchActions了
from selenium.webdriver import TouchActions
from selenium.webdriver.common.by import By

class touchAction:
    def setup(self):
        option = webdriver.ChromeOptions()
        option.add_experimental_option('w3c', False)
        self.driver = webdriver.Chrome(options=option)
        self.driver.implicitly_wait(3)
        self.driver.maximize_window()

    def teardown(self):
        self.driver.quit()
        print('结束了!')

    def test_TouchAction(self):
        self.driver.get('http://www.baidu.com')
        kw = self.driver.find_element(by=By.XPATH,value='//*[@id="kw"]')
        su = self.driver.find_element(by=By.XPATH,value='//*[@id="su"]')
        kw.send_keys('TouchAction')
        action = TouchActions(self.driver)
        action.tap(su)
        action.perform()
        action.scroll_from_element(kw,0,10000).perform()

但是这个呢 已经用不上了

表单操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网页frame与多窗口处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from selenium_base import Base
from selenium.webdriver import ActionChains
from time import sleep

class Test_switch(Base):
    def test_switch(self):
        self.driver.get('http://www.baidu.com')
        self.driver.find_element(by=self.By.XPATH,value='//*[@id="s-top-loginbtn"]').click()
        register_btn = self.driver.find_element(by=self.By.XPATH,value='//*[@id="TANGRAM__PSP_11__regLink"]')
        action = ActionChains(self.driver)
        action.click(register_btn)
        action.perform()
        print(self.driver.current_window_handle,self.driver.window_handles)
        window_handles = self.driver.window_handles
        self.driver.switch_to.window(window_handles[-1])
        print(self.driver.current_window_handle)
        self.driver.find_element(by=self.By.ID,value='TANGRAM__PSP_4__userName').send_keys("LiangAnqi")
        sleep(0.5)
        self.driver.switch_to.window(window_handles[0])
        sleep(5)

frame处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium_base import Base
class Test_Switch(Base):
    def test_switch(self):
        self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
        self.driver.switch_to.frame('iframeResult')
        drag = self.driver.find_element(by=self.By.ID,value="draggable")
        drop = self.driver.find_element(by=self.By.ID,value="droppable")
        print(drag.text,drop.text)
        self.driver.switch_to.default_content()
        print(self.driver.find_element(by=self.By.XPATH,value='//*[@id="submitBTN"]').text)
        self.sleep(3)

selenium 多浏览器处理

在这里插入图片描述
在这里插入图片描述
但是呢 要在terminal输入:browser=Chrome pytest selenium_test/switch_to_frame.py -s -v

执行javascript脚本

相关文章:

  • grpc和protobuf在一起
  • 1. HelmTemplate 3分钟将项目打包成Helm Chart并部署至k8s
  • 【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量
  • Redis 备份恢复(持久化)手册
  • 【Linux】01-Linux系统CentOS7虚拟机VMware安装保姆级教程
  • Go语言各种扩容机制(防止混淆)
  • Pytorch深度学习——线性回归实现 04(未完)
  • 虚拟内存、锁页内存、内存分页、分段、段页式内存管理(超详细)
  • 【BOOST C++】教程4:常量和宏
  • 不可以涩涩!AI续写软件初体验;迁移学习路线图;谷歌新闻非官方搜索API;CS295『因果推理』2021课程资料;前沿论文 | ShowMeAI资讯日报
  • 高项_第十四章信息文档管理与配置管理
  • 07 nginx 的 worker process 的调试
  • 时间序列预测:用电量预测 04 Std_Linear(多元线性回归算法 数据标准化)
  • boost之跨平台 错误处理
  • 【Shell编程】字符截取命令awk、sed命令
  • python3.6+scrapy+mysql 爬虫实战
  • 【5+】跨webview多页面 触发事件(二)
  • express + mock 让前后台并行开发
  • Java知识点总结(JavaIO-打印流)
  • oschina
  • PAT A1017 优先队列
  • Python十分钟制作属于你自己的个性logo
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue.js 移动端适配之 vw 解决方案
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 智能网联汽车信息安全
  • 最近的计划
  • # centos7下FFmpeg环境部署记录
  • #pragam once 和 #ifndef 预编译头
  • #pragma 指令
  • #Spring-boot高级
  • #WEB前端(HTML属性)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (附源码)计算机毕业设计ssm电影分享网站
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (五)关系数据库标准语言SQL
  • (一)80c52学习之旅-起始篇
  • (译)2019年前端性能优化清单 — 下篇
  • (转)程序员疫苗:代码注入
  • (转)用.Net的File控件上传文件的解决方案
  • (转)原始图像数据和PDF中的图像数据
  • .NET gRPC 和RESTful简单对比
  • .NET Project Open Day(2011.11.13)
  • .net wcf memory gates checking failed
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .Net中的集合
  • [c++] 自写 MyString 类
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [HNOI2008]Cards
  • [I2C]I2C通信协议详解(二) --- I2C时序及规格指引