Selenium 自动化测试(三)

Selenium WebDriver 对应的角色

  • 工程师写自动化测试代码:发请求给浏览器驱动
  • 浏览器驱动:解析代码后发生至浏览器
  • 浏览器:执行浏览器驱动发来的指令,最终完成工程师定义的操作

Selenium WebDriver 和浏览器的通信

在这里插入图片描述

Selenium WebDriver 协议

webDriver 使用的协议是:JSON Wire protocol
数据格式是:JSON

Selenium WebDriver

Selenium WebDriver 常用属性

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()
    def test_prop(self):
        print(f"driver name is: {self.driver.name}")
        print(f"driver title is: {self.driver.title}")
        print(f"driver title is: {self.driver.current_url}")
        sleep(3)
        self.driver.quit()
if __name__ == '__main__':
    case = TestCase()
    case.test_prop()

执行结果为:

C:\Python3.7.6\python.exe C:\Users\yolan\PycharmProjects\pythonProject\Demo.py 
driver name is: chrome
driver title is: 百度一下,你就知道
driver title is: https://www.baidu.com/

Process finished with exit code 0

Selenium WebDriver 常用动作

在这里插入图片描述

Browser的回退 back,刷新 refresh,前进 forward 和关闭 close/quit

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()

    def test(self):
        sleep(3)
        self.driver.find_element(By.ID, 'kw').send_keys('selenium')
        sleep(3)
        self.driver.find_element(By.ID, 'su').click()
        sleep(3)
        self.driver.back() #回退
        sleep(3)
        self.driver.refresh() #刷新
        sleep(3)
        self.driver.forward() #前进
        sleep(3)
        self.driver.close() #关闭当前tab
        sleep(3)
        self.driver.quit() # 推出浏览器,关闭所有

if __name__ == '__main__':
    case = TestCase()
    case.test()

Browser 多个 tab 间切换

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()
   
    def test_switch(self):
        self.driver.find_element(By.LINK_TEXT, '新闻').click()
        windows = self.driver.window_handles
        i = 0
        while i < 10:
            for w in windows:
                self.driver.switch_to.window(w)
                i += 1
                sleep(2)
        self.driver.close()
        self.driver.quit()


if __name__ == '__main__':
    case = TestCase()
    case.test_switch()

Selenium WebElement

Selenium WebElement 属性

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()

    def testWebElement(self):
        e = self.driver.find_element(By.ID, 'kw')
        e.send_keys('selenium')
        print(f"ID is: {e.id}")
        print(f"size is: {e.size}")
        print(f"rect is: {e.rect}")
        print(f"tag is: {e.tag_name}")
        print(f"text is: {e.text}")

if __name__ == '__main__':
    case = TestCase()
    case.testWebElement()

执行结果:

C:\Python3.7.6\python.exe C:\Users\yolan\PycharmProjects\pythonProject\Demo.py 
ID is: 0dc98c86-d2bc-4c62-a408-6b7017482e8c
size is: {'height': 38, 'width': 503}
rect is: {'height': 38, 'width': 503, 'x': 765, 'y': 17}
tag is: input
text is: 

Process finished with exit code 0

Selenium WebElement 动作

在这里插入图片描述

下拉列表常用方法

在这里插入图片描述

Selenium 弹出框

  • Alter:提示
  • Confirm:确认
  • Prompt:输入内容
    在这里插入图片描述

Selenium 等待

Selenium 等待方式

  • 固定等待: time.sleep,不建议用于实际运行脚本;建议脚本调试过程使用,方便快捷

  • implicitly_wait/隐式等待: 对整个driver起作用,在最开始设置一次就可以

    self.driver.implicitly_wait(10)
    
  • WebDriverWait/显示等待:两个方法 util 和util_not

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

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()

    def testWait(self):
        wait = WebDriverWait(self.driver, 2)
        wait.until(EC.title_is('百度一下,你就知道'))
        self.driver.find_element(By.ID, 'kw').send_keys('selenium')
        self.driver.find_element(By.ID, 'su').click()
        sleep(3)
        self.driver.quit()

if __name__ == '__main__':
    case = TestCase()
    case.testWait()

Selenium 等待条件

在这里插入图片描述

Selenium 鼠标和键盘事件

封装在ActionChains类中
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()

    def test_mouse(self):
        self.driver.find_element(By.ID, 'kw').send_keys('selenium')
        btn = self.driver.find_element(By.ID, 'su')
        ActionChains(self.driver).click(btn).perform()#单击
        sleep(2)
        ActionChains(self.driver).double_click(btn).perform()#双击
        sleep(2)
        ActionChains(self.driver).context_click(btn).perform()#点击右键
        sleep(2)
        self.driver.quit()


if __name__ == '__main__':
    case = TestCase()
    case.test_mouse()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值