0


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
classTestBaidu:defsetup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()# 隐式等待 类似于异步
        self.driver.implicitly_wait(5)defteardown(self):# 退出所有标签
        self.driver.quit()deftest_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

classTest_wait:defsetup(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')deftest_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
classTestAction:defsetup(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)
        self.driver.maximize_window()defteardown(self):
        self.driver.quit()print('结束了!')deftest_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.skipdeftest_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)deftest_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)deftest_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

classtouchAction:defsetup(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()defteardown(self):
        self.driver.quit()print('结束了!')deftest_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

classTest_switch(Base):deftest_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
classTest_Switch(Base):deftest_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
classTest_Js(Base):deftest_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/

deftest_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
classTest_Upload(Base):deftest_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
classTest_Switch(Base):deftest_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
  • 不需要表示整个页面
  • 同一动作的不同结果被合并为不同的方法在这里插入图片描述

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

等待

在这里插入图片描述

无界面模式

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

标签: ide python 开发语言

本文转载自: https://blog.csdn.net/camille009/article/details/126829235
版权归原作者 Chiandra_Leong 所有, 如有侵权,请联系我们删除。

“web自动化测试(selenium.webdriver)”的评论:

还没有评论