当前位置:   article > 正文

Selenium基础知识点总结_selenium定位元素优先级

selenium定位元素优先级

寄语

让有意义的事情变的有意思,让有意思的事情变的有意义。

一、自动化测试是什么?

自动化测试是指通过自动化测试工具或其他手段,按照测试人员的测试计划进行自动测试,目的是减轻手工测试的工作量。

二、操作

1.环境搭建

1.为python安装selenium模块:pip install selenium
2.下载相应浏览器驱动:ChromedriverFirefoxdriver

2.selenium知识点汇总

一、selenium之元素定位
	正常情况下优先级:id>name>CSS selector>xpath
	优先选择CSS selector的原因
	1.css配合html工作,xpath配合xml工作
	2.相对xpath,更简洁
	3.前端开发主要使用css
	除了find_element_by_xxx(),find_element()函数也可以定位
	需要导入By即from selenium.webdrive.common.by import By.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
from  selenium import webdriver
from time import  sleep
"""
测试demon是http://sahitest.com/demo/
"""

class Dwelement(object):

    #初始化
    def __init__(self):
        #实例化浏览器
        self.drive=webdriver.Chrome()
        #URl
        self.drive.get('http://sahitest.com/demo/')
        #全屏
        self.drive.maximize_window()
    #find_element_by_id
    def Dw_by_id(self):
        self.drive.find_element_by_link_text('Link Test').click()
        sleep(1)
        self.drive.find_element_by_id('linkById').click()
        #返回
        self.drive.back()
        #返回主界面
        self.drive.back()


    #find_element_by_name
    def Dw_by_name(self):
        self.drive.find_element_by_link_text('Form Test').click()
        #弹框
        al=self.drive.switch_to.alert
        sleep(1)
        al.accept()
        self.drive.find_element_by_name('t1').send_keys('hello selenium')
        sleep(1)
        self.drive.back()

    #find_element_by_css
    def Dw_by_css(self):
        self.drive.find_element_by_link_text('Form Test').click()
        #处理弹框
        al=self.drive.switch_to.alert
        al.accept()
        self.drive.find_element_by_css_selector('body > form > table > tbody > tr:nth-child(3)\
        > td:nth-child(2) > input[type=text]').send_keys('hello')



    #find_element_by_xpth
    def Dw_by_xpth(self):
        self.drive.find_element_by_link_text('Form Test').click()
        #处理弹框
        al=self.drive.switch_to.alert
        sleep(1)
        al.accept()#/html/body/form/table/tbody/tr[3]/td[2]/input
        # self.drive.find_element_by_xpath('/html/body/form/table/tbody/tr[3]/td[2]/input').send_keys('hello')
        self.drive.find_element_by_xpath('.//tr[3]/td[2]/input').send_keys('hello')


    #find_element_by_clssname
    def Dw_by_class(self):
        self.drive.find_element_by_link_text('Element On Top Test').click()
        sleep(1)
        element=self.drive.find_elements_by_class_name('parent')
        print(element)



if __name__=="__main__":
    e=Dwelement()
    e.Dw_by_id()
    sleep(1)
    e.Dw_by_name()
    sleep(1)
    e.Dw_by_xpth()
    e.Dw_by_css()
    e.Dw_by_class()
  • 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
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
二、selenium之浏览器控制
	1.控制浏览器大小
	2.浏览器前进、后退、刷新
	3.webdriver常用方法和其它方法
  • 1
  • 2
  • 3
  • 4
from selenium import  webdriver
from time import  sleep

class Browser(object):

    #初始化
    def __init__(self):
        #实例化浏览器
        self.driver=webdriver.Chrome()
        #以必应为demo
        self.driver.get('https://cn.bing.com/')

    def Set_window(self):
        #控制浏览器大小 设置宽800像素 高600像素
        self.driver.set_window_size(800,600)
        #全屏显示
        self.driver.maximize_window()
        #最小浏览器
        self.driver.minimize_window()

    def Control(self):
        #定位搜索框
        s=self.driver.find_element_by_id('sb_form_q')
        s.send_keys('自动化测试')
        s.submit()#submit()方法用于提交表单。 在搜索框输入关键字之后的“回车” 操作,
        # self.driver.find_element_by_id('sb_form_go').click()
        #后退
        self.driver.back()
        #前进
        self.driver.forward()
        #刷新
        self.driver.refresh()


    def Other(self):
        """
        size;返回元素大小
        text:返回元素文本
        get_attribute:获得属性值
        is_displayed():检测元素是否用户可见
        :return:
        """
        get_att=self.driver.find_element_by_id('id_a').get_attribute(name='aria-label')
        print(get_att)
        txt=self.driver.find_element_by_id('id_s').text
        print(txt)
if __name__ == '__main__':
    e=Browser()
    # e.Set_window()
    # e.Control()
    e.Other()
  • 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
三、selenium之iframe切换
	iframe,称为浮动帧标记,可以将一个html文件嵌入到另一个html文件中
	常用的方法:
	switch_to.frame() 切换到iframe上
	switch_to.default_content() 切回到原主页面上
    通过定位或者索引进行切换
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
from  selenium import  webdriver
from  time import sleep
from selenium.webdriver.common.by import By
class Iframes(object):
    #初始化
    def __init__(self):
        self.drive=webdriver.Chrome()
        self.drive.get('http://sahitest.com/demo/')
        self.drive.maximize_window()

    def Frames(self):
        #切入第一个frame
        self.drive.find_element_by_link_text('Frames Test').click()
        sleep(1)
        self.drive.switch_to.frame(0)
        self.drive.find_element(By.LINK_TEXT,'Link Test').click()
        self.drive.switch_to.default_content()
        self.drive.switch_to.frame(1)
        self.drive.find_element(By.LINK_TEXT,'Link Test').click()
        self.drive.quit()



    def IFrame(self):
        self.drive.find_element(By.LINK_TEXT, "IFrames Test").click()
        sleep(1)
        self.drive.switch_to.frame(0)
        self.drive.find_element(By.LINK_TEXT, "Link Test").click()
        self.drive.switch_to.default_content()
        self.drive.switch_to.frame(1)
        self.drive.find_element(By.LINK_TEXT, "Link Test").click()


if __name__ == '__main__':
    e=Iframes()
    # e.Frames()
    e.IFrame()
  • 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
四、selenium之多标签页切换
current_window_handle:获取当前标签页句柄
window_handles:返回所有标签页句柄
switch_to.window(标签页句柄):切换到对应的标签页
  • 1
  • 2
  • 3
  • 4
from  selenium import  webdriver
from time import  sleep

class BQ(object):

    #初始化 以百度e为demo
    def __init__(self):
        self.driver=webdriver.Chrome()
        self.driver.get('http://www.baidu.com')
        self.driver.maximize_window()

    def bq(self):
        #点击更多
        self.driver.find_element_by_link_text('更多').click()
        #当前页面句柄
        current_handle=self.driver.current_window_handle
        #所有页面句柄
        handles=self.driver.window_handles
        for handle in handles:
            if handle!=current_handle:
                #切换句柄
                self.driver.switch_to.window(handle)
        #搜索框定位
        s=self.driver.find_element_by_id('kw')
        s.send_keys('python')
        s.submit()

if __name__ == '__main__':
    e=BQ()
    e.bq()
  • 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
五、selenium之鼠标和键盘事件
	——————————————————————————
	鼠标事件:提供了ActionChains
	常用方法:
	perform()执行操作;context_click():右击;
	double_click():双击;drag_and_drop():拖动;
	move to element():鼠标悬停
	——————————————————————————
	键盘事件:Keys()
	send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
    send_keys(Keys.SPACE) 空格键(Space)
    send_keys(Keys.TAB) 制表键(Tab)
    send_keys(Keys.ESCAPE) 回退键(Esc)
    send_keys(Keys.ENTER) 回车键(Enter)
    send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
    send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
	......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
from  selenium import  webdriver
from  time import  sleep
from  selenium.webdriver.common.action_chains import ActionChains

class Ac(object):
    #以http://sahitest.com/demo/为demo
    def __init__(self):
        #实例化
        self.driver=webdriver.Chrome()
        self.driver.get('http://sahitest.com/demo/')
        self.driver.maximize_window()

    #鼠标拖动
    def ac_td(self):
        #进入该页面
        self.driver.find_element_by_link_text('Drag Drop Test').click()
        #定位原位置
        source=self.driver.find_element_by_id('dragger')
        #目标位置
        target=self.driver.find_element_by_css_selector('body > div:nth-child(4)')
        ActionChains(self.driver).drag_and_drop(source,target).perform()#perform不要忘记


    #鼠标悬停
    def ac_xt(self):
        #进入该页面
        self.driver.find_element_by_link_text('Mouse over').click()
        #元素定位
        lo=self.driver.find_element_by_css_selector('body > a:nth-child(2) > span')
        ActionChains(self.driver).move_to_element(lo).perform()


if __name__ == '__main__':
    e=Ac()
    # e.ac_td()
    e.ac_xt()
  • 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
from  selenium import webdriver
from  time import  sleep
from  selenium.webdriver.common.keys import Keys


class Kb(object):
    #以百度demo为例
    def __init__(self):
        self.driver=webdriver.Chrome()
        self.driver.get('https://www.baidu.com/')
        self.driver.maximize_window()

    def demo(self):
        s=self.driver.find_element_by_id('kw')
        s.send_keys('在吗')
        #输入一个空格
        s.send_keys(Keys.SPACE)
        #再次输入
        s.send_keys('我在')

        #键盘输入回车
        s.send_keys(Keys.ENTER)

if __name__ == '__main__':
    Kb().demo()

  • 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
六、selenium之其它操作
	·下拉框
	·警告框处理
	·断言
	·设置元素等待
	·窗口截图
	·文件上传
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
from selenium import webdriver
from time import  sleep
import time,os
from selenium.webdriver.support.select import Select

class Othermethed(object):

    #http://sahitest.com/demo/为demo
    def __init__(self):
        self.driver=webdriver.Chrome()
        self.driver.get('http://sahitest.com/demo/')
        self.driver.maximize_window()
        """
        两种类型:显式等待和隐式等待
        from selenium.webdriver.support.ui import WebdriverWait
        from selemium.webdriver.support import expected_contions as Ec
        #默认0.5s 最多等5s
        WebDriverWait(driver,5,0.5).util()
        """
        #设置元素隐式等待
        self.driver.implicitly_wait(10)

    def sl(self):
        #进入slect页面
        self.driver.find_element_by_link_text('Select Test').click()
        #下拉框定位
        lo=self.driver.find_element_by_id('s1Id')
        #选择的方法有多种 value index text
        Select(lo).select_by_value('o1')

    def al(self):
        """
        text:返回信息
        accept()接受
        dismiss()取消
        send_keys()发送文本
        :return:
        """
        #进入alert页面
        self.driver.find_element_by_link_text('Alert Test').click()
        #触发alert
        self.driver.find_element_by_name('b1').click()
        self.driver.switch_to.alert.accept()

    def upload(self):
        #进入文件上传页面
        self.driver.find_element_by_link_text('File Upload Test').click()
        #input标签直接send_keys()
        self.driver.find_element_by_id('file').send_keys(r'F:\Desktop\hamlet.txt')
        self.driver.find_element_by_name('submit').click()
        #截图
        t=time.time()
        path=os.path.dirname(os.path.dirname(__file__))+'\\screenshot'
        picture_name=path+"\\"+str(t)+'.png'
        self.driver.save_screenshot(picture_name)


if __name__ == '__main__':
    e=Othermethed()
    # e.sl()
    # e.al()
    e.upload()
  • 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

总结

以上内容都是基础,在真实的项目上会遇到很多问题,我们可以通过脚本录制等多种方法再次进行元素定位从而解决。

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

闽ICP备14008679号