当前位置:   article > 正文

web自动化测试(selenium.webdriver)_web自动化测试selenium

web自动化测试selenium

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

但是这个呢 已经用不上了

表单操作

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

网页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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述
在这里插入图片描述
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)
  • 1
  • 2
  • 3
  • 4

文件上传、弹框处理

在这里插入图片描述
在这里插入图片描述
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Page Object设计模式

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

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

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

等待

在这里插入图片描述

无界面模式

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/941698
推荐阅读
相关标签
  

闽ICP备14008679号