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脚本

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

from selenium_base import Base
class Test_Js(Base):
    def test_js(self):
        self.driver.get('http://www.baidu.com')
        self.driver.execute_script("document.querySelector('#kw').value='selenium测试'")
        self.driver.execute_script("document.querySelector('#su').click()")
        self.driver.execute_script("document.documentElement.scrollTop=10000")
        self.sleep(2)
        self.driver.execute_script("document.querySelectorAll('.page-inner_2jZi2 a')[8].click()")
        self.sleep(5)
        for code in [
            'return document.title','return JSON.stringify(performance.timing)'
        ]:
            print(self.driver.execute_script(code))

在这里插入图片描述
在这里插入图片描述
https://www.12306.cn/index/

    def test_12306(self):
        self.driver.get('https://www.12306.cn/index/')
        self.driver.execute_script("a=document.querySelector('#train_date');a.value=''")
        self.sleep(5)

文件上传、弹框处理

在这里插入图片描述
在这里插入图片描述
https://image.baidu.com

from selenium_base import Base
class Test_Upload(Base):
    def test_upload(self):
        self.driver.get('https://image.baidu.com')
        self.driver.find_element(by=self.By.ID,value='sttb').click()
        self.driver.find_element(by=self.By.ID,value='stfile').send_keys('/Users/lianganqi/Desktop/python/img/baidu.jpg')
        self.sleep(8)

在这里插入图片描述

from selenium_base import Base
from selenium.webdriver import ActionChains
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")
        action = ActionChains(self.driver)
        action.drag_and_drop(drag,drop).perform()
        self.sleep(2)
        self.driver.switch_to.alert.accept()
        self.driver.switch_to.default_content()
        self.driver.find_element(by=self.By.ID,value='submitBTN').click()
        self.sleep(3)

Page Object设计模式

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

  • 公共方法要替代页面的服务
  • 不要暴露页面的细节
  • 不要在page object中使用断言(assert)
  • 方法返回page object
  • 不需要表示整个页面
  • 同一动作的不同结果被合并为不同的方法
    在这里插入图片描述

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

等待

在这里插入图片描述

无界面模式

不会打开网页,但是一样能获取到数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值