python+selenium常用方法整理

 
import time
from selenium import webdriver

driver = webdriver.Chrome()
# driver = webdriver.Firefox()  # 火狐驱动


def __init__(self):
    self.driver = driver


#  打开浏览器的方法
def Openbrowser(self):
    if self.browser_type == 'Firefox':
        self.driver = webdriver.Firefox()
    elif self.browser_type == 'Chrome':
        self.driver = webdriver.Chrome()
    elif self.browser_type == 'IE':
        self.driver = webdriver.Ie()
    elif self.browser_type == '':
        self.driver = webdriver.Chrome()
    self.driver.maximize_window()    # 窗口最大化


def geturl(value):
    driver.get(value)


# 浏览器前进操作
def forward():
    driver.forward()


# 浏览器后退操作
def back():
    driver.back()


def quit():
    driver.quit()


# 隐式等待
def wait(seconds):
    driver.implicitly_wait(seconds)


# 获取句柄
def get_windows_handles():
    driver.window_handles  # 获取当前所有窗口的句柄
    driver.current_window_handle  # 获取当前窗口句柄
    driver.switch_to_window(driver.window_handles[1])   # 切换到第二个窗口的句柄
    print(driver.window_handles)   # 打印句柄


# 切窗口
def Current_handel(self):
    # 这时切换到新窗口
    all_handles = self.driver.window_handles
    for handle in all_handles:
        self.driver.switch_to.window(handle)


# 切换到弹窗
def alert_windows():
    alert = driver.switch_to_alert()
    print(alert.text)
    alert.accept()
    alert.dismiss()

# 截屏
driver.get_screenshot_as_file("C:\\Users\\你的账户名\\Desktop\\baidu.png")

# 保存图片
def get_windows_img(self):
        """
        在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\Screenshots下
        """
    file_path = os.path.dirname(os.path.abspath('.')) + '/screenshots/'
    rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
    screen_name = file_path + rq + '.png'
        try:
            self.driver.get_screenshot_as_file(screen_name)
        except NameError as e:
            self.get_windows_img()


#  点击操作
def Click(type, value):
    if type == "xpath":
        driver.find_element_by_xpath(value).click()
    elif type == "class_name":
        driver.find_element_by_class_name(value).click()
    elif type == "id":
        driver.find_element_by_id(value).click()
    elif type == "name":
        driver.find_element_by_name(value).click()
    elif type == "link_text":
        driver.find_element_by_link_text(value).click()
    elif type == "partial_link_text":
        driver.find_element_by_partial_link_text(value).click()


# 输入内容操作
def Input(type, value1, value2):
    if type == "xpath":
        driver.find_element_by_xpath(value1).send_keys(value2)
    elif type == "class_name":
        driver.find_element_by_class_name(value1).send_keys(value2)
    elif type == "id":
        driver.find_element_by_id(value1).send_keys(value2)
    elif type == "name":
        driver.find_element_by_name(value1).send_keys(value2)
    elif type == "link_text":
        driver.find_element_by_link_text(value1).send_keys(value2)
    elif type == "partial_link_text":
        driver.find_element_by_partial_link_text(value1).send_keys(value2)


# 鼠标清除输入框内容
def Clear(self, type, value):
    if type == "xpath":
        self.driver.find_element_by_xpath(value).clear()
    elif type == "id":
        self.driver.find_element_by_id(value).clear()
    elif type == "name":
        self.driver.find_element_by_name(value).clear()
    elif type == "link_text":
        self.driver.find_element_by_link_text(value).clear()
    elif type == "partial_link_text":
        self.driver.find_element_by_partial_link_text(value).clear()


   # 验证元素是否存在
    def Check_element(self, type, value):
        if type == "xpath":
            self.driver.find_element_by_xpath(value)
        elif type == "id":
            self.driver.find_element_by_id(value)
        elif type == "name":
            self.driver.find_element_by_name(value)
        elif type == "link_text":
            self.driver.find_element_by_link_text(value)
        elif type == "partial_link_text":
            self.driver.find_element_by_partial_link_text(value)

    # 获取子元素
    def Select_child_elements(self, type, value1, value2):
        if type == "xpath":
            Select(self.driver.find_element_by_xpath(value1)).select_by_visible_text(value2)
        elif type == "id":
            Select(self.driver.find_element_by_id(value1)).select_by_visible_text(value2)
        elif type == "name":
            Select(self.driver.find_element_by_name(value1)).select_by_visible_text(value2)
        elif type == "link_text":
            Select(self.driver.find_element_by_link_text(value1)).select_by_visible_text(value2)
        elif type == "partial_link_text":
            Select(self.driver.find_element_by_partial_link_text(value1)).select_by_visible_text(value2)

    # 获取输入框的值
    def Get_attribute(self, type, value1, value2):
        if type == "xpath":
            Value = self.driver.find_element_by_xpath(value1).get_attribute(value2)
            return Value
        elif type == "name":
            Value = self.driver.find_element_by_name(value1).get_attribute(value2)
            return Value
        elif type == "link_text":
            Value = self.driver.find_element_by_link_text(value1).get_attribute(value2)
            return Value
        elif type == "class_name":
            Value = self.driver.find_element_by_class_name(value1).get_attribute(value2)
            return Value
        elif type == "id":
            Value = self.driver.find_element_by_id(value1).get_attribute(value2)
            return Value

            # 获取下拉框的文本的值

    def Get_text(self, type, value):
        if type == "xpath":
            text = self.driver.find_element_by_xpath(value).text
            return text
        elif type == "name":
            text = self.driver.find_element_by_name(value).text
            return text
        elif type == "link_text":
            text = self.driver.find_element_by_link_text(value).text
            return text
        elif type == "class_name":
            text = self.driver.find_element_by_class_name(value).text
            return text
        elif type == "id":
            text = self.driver.find_element_by_id(value).text
            return text

    # 显性等待时间
    def WebDriverWait(self, MaxTime, Mimtime, value):
        element = self.driver.find_element(By.ID, value)
        WebDriverWait(self.driver, MaxTime, Mimtime).until(EC.presence_of_element_located(element))

    # # 鼠标移动点击机制
    def Move_action(self, type, value):
        if type == "xpath":
            xm = self.driver.find_element_by_xpath(value)
            webdriver.ActionChains(self.driver).click(xm).perform()
        elif type == "id":
            xm = self.driver.find_element_by_id(value)
            webdriver.ActionChains(self.driver).click(xm).perform()
        elif type == "name":
            xm = self.driver.find_element_by_name(value)
            webdriver.ActionChains(self.driver).click(xm).perform()
        elif type == "link_text":
            xm = self.driver.find_element_by_link_text(value)
            webdriver.ActionChains(self.driver).click(xm).perform()

    # 校验按钮是否为选中状态
    def Is_selected(self, type, value):
        if type == "id":
            self.driver.find_element_by_id(value).is_selected()
        elif type == "xpath":
            self.driver.find_element_by_xpath(value).is_selected()
        elif type == "class_name":
            self.driver.find_element_by_class_name(value).is_selected()
        elif type == "name":
            self.driver.find_element_by_name(value).is_selected()
        elif type == "link_text":

            # 获取下拉框的文本的值

            def Get_text(self, type, value):
                if type == "xpath":
                    text = self.driver.find_element_by_xpath(value).text
                    return text
                elif type == "name":
                    text = self.driver.find_element_by_name(value).text
                    return text
                elif type == "link_text":
                    text = self.driver.find_element_by_link_text(value).text
                    return text
                elif type == "class_name":
                    text = self.driver.find_element_by_class_name(value).text
                    return text
                elif type == "id":
                    text = self.driver.find_element_by_id(value).text
                    return text

                    # 显性等待时间

            def WebDriverWait(self, MaxTime, Mimtime, value):
                element = self.driver.find_element(By.ID, value)
                WebDriverWait(self.driver, MaxTime, Mimtime).until(EC.presence_of_element_located(element))

                # # 鼠标移动点击机制

            def Move_action(self, type, value):
                if type == "xpath":
                    xm = self.driver.find_element_by_xpath(value)
                    webdriver.ActionChains(self.driver).click(xm).perform()
                elif type == "id":
                    xm = self.driver.find_element_by_id(value)
                    webdriver.ActionChains(self.driver).click(xm).perform()
                elif type == "name":
                    xm = self.driver.find_element_by_name(value)
                    webdriver.ActionChains(self.driver).click(xm).perform()
                elif type == "link_text":
                    xm = self.driver.find_element_by_link_text(value)
                    webdriver.ActionChains(self.driver).click(xm).perform()



             # 校验按钮是否为选中状态
            def Is_selected(self, type, value):
                if type == "id":
                    self.driver.find_element_by_id(value).is_selected()
                elif type == "xpath":
                    self.driver.find_element_by_xpath(value).is_selected()
                elif type == "class_name":
                    self.driver.find_element_by_class_name(value).is_selected()
                elif type == "name":
                    self.driver.find_element_by_name(value).is_selected()
                elif type == "link_text":
                    self.driver.find_element_by_link_text(value).is_selected()

                #页面元素拖拽
def elementDragging():
   try:
       driver = webdriver.Firefox()
       url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
       driver.get(url)
       driver.implicitly_wait(5)
       # 切换到元素所在的frame
       driver.switch_to.frame("iframeResult")
       # 起点
       start = driver.find_element_by_id("draggable")
       # 终点
       end = driver.find_element_by_id("droppable")

       actions = ActionChains(driver)
       actions.drag_and_drop(start, end)
       # 执行
       actions.perform()
   except Exception:
       print("exception")
   finally:
       driver.close()


#页面切换
def pageSwitching():
   driver = webdriver.Firefox()
   driver.get('http://www.baidu.com')
   #获取当前百度界面的窗口句柄
   BD_windows = driver.current_window_handle
   #打印
   print(BD_windows)
   # 隐示等待,为了等待充分加载好网址
   driver.implicitly_wait(5)

   write = driver.find_element_by_id("kw")
   write.send_keys("CSDN")
   # 点击
   driver.find_element_by_id('su').click()
   try:
       #打开一个网页
       driver.find_element_by_link_text(u'CSDN-专业IT技术社区').click()
       # 隐示等待,为了等待充分加载好网址
       driver.implicitly_wait(5)
       #打印所有的窗口
       print(driver.window_handles)
       # 隐示等待,为了等待充分加载好网址
       driver.implicitly_wait(5)
       #窗口切换到第二个网页
       driver.switch_to_window(driver.window_handles[1])
       #点击第二个网页的"写博客"按钮
       driver.find_element_by_link_text(u'写博客').click()
       time.sleep(5)

   except Exception:
       print("exception")
   finally:

       driver.quit()


# 鼠标点击事件
# 键盘操作时间
context_click()   #  右击
double_click()  # 双击
drag_and_drop() # 拖动
move_to_element() # 鼠标拖动

from selenium.webdriver.common.action_chains import ActionChains

brower = webdriver.Firefox
right_click = brower.find_element_by_id("xx")
#对定位到的元素进行右击操作
ActionChains(brower).context_click(right_click).perform()

# 鼠标悬停
move_house = brower.find_element_by_id("xx")
ActionChains(brower).move_to_element(move_house).perform()
brower.find_element_by_id("id").click()

# 鼠标双击
double = brower.find_element_by_id("")
ActionChains(brower).double_click(double).perform()

title = brower.title  # 获取title
url = brower.current_url   # 获取当前url链接

# 截图
driver.get_screenshot_file(r"D:\test\pythontest\picture.png")

# 滑动浏览器的滚动条。执行js
driver.set_window_size(100,30000)  # 浏览器设置高度
driver.excute_script("window.scrollBy(0,3000)")
time.sleep(1)
driver.execute_script("window.scrollBy(0,5000)")

# 使用JS脚本直接操作   id为滚动条的id
# 滚动到底部
js = "var q=document.documentElement.scrollTop=100000"
# 滚动条移动到页面的顶部
js = "var q=document.documentElement.scrollTop=0"
# 页面当中内嵌窗口的滚动条进行操作,先定位到该内嵌窗口
js = "var q=document.getElementById('id').scrollTop=100000"    0

# ie和火狐可以,chrome不行
js = "var q=document.body.scrollTop=0"
driver.execute_script(js)
time.sleep(3)

# 使用js脚本拖动到提定地方,推荐这个方法
target = driver.find_element_by_id(id)
driver.execute_script("arguments[0].scrollIntoView();",target) # 拖动到可见的元素去

# 页面显示进行变通,发送tab键
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id(id).send_keys(Keys.TAB)  # 切换tab键.跳到下一个输入框,切换tab,显现元素
# 通过键盘down按键进行下划
driver.find_element_by_id(id).send_keys(Keys.DOWN)



#  unittest 框架
#msg:判断不成立时需要反馈的字符串
assertEqual(self, first, second, msg=None)
--判断两个参数相等:first == second
assertNotEqual(self, first, second, msg=None)
--判断两个参数不相等:first != second
assertIn(self, member, container, msg=None)
--判断是字符串是否包含:member in container
assertNotIn(self, member, container, msg=None)
--判断是字符串是否不包含:member not in container
assertTrue(self, expr, msg=None)
--判断是否为真:expr is True
assertFalse(self, expr, msg=None)
--判断是否为假:expr is False
assertIsNone(self, obj, msg=None)
--判断是否为None:obj is None
assertIsNotNone(self, obj, msg=None)
--判断是否不为None:obj is not None

下面是一些常用的键盘事件:

– Keys.BACK_SPACE:回退键(BackSpace) 
– Keys.TAB:制表键(Tab) 
– Keys.ENTER:回车键(Enter) 
– Keys.SHIFT:大小写转换键(Shift) 
– Keys.CONTROL:Control键(Ctrl) 
– Keys.ALT:ALT键(Alt) 
– Keys.ESCAPE:返回键(Esc) 
– Keys.SPACE:空格键(Space) 
– Keys.PAGE_UP:翻页键上(Page Up) 
– Keys.PAGE_DOWN:翻页键下(Page Down) 
– Keys.END:行尾键(End) 
– Keys.HOME:行首键(Home) 
– Keys.LEFT:方向键左(Left) 
– Keys.UP:方向键上(Up) 
– Keys.RIGHT:方向键右(Right) 
– Keys.DOWN:方向键下(Down) 
– Keys.INSERT:插入键(Insert) 
– DELETE:删除键(Delete) 
– NUMPAD0 ~ NUMPAD9:数字键1-9 
– F1 ~ F12:F1 - F12键 
– (Keys.CONTROL, ‘a’):组合键Control+a,全选 
– (Keys.CONTROL, ‘c’):组合键Control+c,复制 
– (Keys.CONTROL, ‘x’):组合键Control+x,剪切 
– (Keys.CONTROL, ‘v’):组合键Control+v,粘贴

 

操作键盘事件

driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')#输入Ctrl+a全选
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')#输入Ctrl+c复制
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')#输入Ctrl+v粘贴
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.ENTER)#输入回车键

推荐一个selenium元素定位的练手网站http://sahitest.com/demo/index.htm

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值