zoukankan      html  css  js  c++  java
  • Selenium模块

    打开浏览器并搜寻指定url

    from selenium import  webdriver
    browser=webdriver.Chrome()
    browser.get('https://www.baidu.com/')
    

    chrome设置无头模式

    from selenium.webdriver.chrome.options import Options

    chrome_options = Options()
    chrome_options.add_argument('--headless')
    browser = webdriver.Chrome(options=chrome_options)
    chrome设置无头模式

    一 元素查找方法

    elements为查找所有的定位标签,类型为列表,element是第一个定位标签

        browser.find_element_by_id()           通过元素id定位

        browser.find_element_by_class_name()     通过class属性的值去定位

        browser.find_element_by_name()        通过name属性去定位

        browser.find_elements_by_tag_name()       通过标签名去定位

        browser.find_element_by_link_text()         通过文本链接去定位  

        browser.find_element_by_partial_link_text()    通过部分链接来定位

        browser.find_element_by_xpath()        根据html路径来定位

    1 from selenium import webdriver
    2 import time
    3 browser=webdriver.Chrome()
    4 browser.get('https://www.baidu.com')
    5 print(browser.find_element_by_xpath("//input[@id='kw']"))
    6 time.sleep(1)
    7 browser.close()
    8 返回对象
    9 <selenium.webdriver.remote.webelement.WebElement (session="15683e948eeffe5b3742e139bd0d35a4", element="50b28986-cf1c-427e-964c-13f97d5434c1")>
    Xpath用法

        browser.find_elements_by_css_selector()     通过css来定位,该定位方法与css选择器用法一致

    1 broswer.find_element_by_css_selector("#kw")
    2 broswer.find_element_by_css_selector("[name=wd]")
    3 broswer.find_element_by_css_selector(".s_ipt")
    4 broswer.find_element_by_css_selector("html > body > form > span > input")
    5 broswer.find_element_by_css_selector("span.soutu-btn> input#kw")
    6 broswer.find_element_by_css_selector("form#form > span > input")
    Css_selector用法

     二:控制浏览器操作的一些方法

    用法

    说明

    Set_window_size()

    设置浏览器的大小

    Back()

    控制浏览器后退

    Forward()

    控制浏览器前进

    Refresh()

    刷新当前页面

    Clear()

    清除输入框内的文本

    Send_keys(value)

    模拟键盘输入

    Click()

    用于提交表单

    Get_attribute()

    获取元素属性值

    Is_displayed()

    设置该元素是否用户可见

    Size()

    返回元素的尺寸

    Submit()

    用于提交表单

    Text()

    获取元素的文本

    from selenium import webdriver
    import time
    browser=webdriver.Chrome()
    browser.set_window_size(200,200)
    browser.get('https://www.baidu.com')
    element=browser.find_element_by_xpath("//a[@id='setf']")
    print(element.text)#获取标签的文本内容
    
    print(element.get_attribute('href'))#获取某个属性的值
    print(element.size)
    
    element=browser.find_element_by_xpath("//input[@id='kw']")#找到input标签
    element.send_keys('python')#在输入框内输入python
    element.clear()#清除输入狂内容
    submit.submit()#提交数据
    submit.click()#点击提交按钮提交内瓤
    
    time.sleep(1)
    element.clear()#清除输入狂内容
    time.sleep(1)
    browser.get('https://www.taobao.com')
    time.sleep(1)
    browser.back()
    time.sleep(1)
    
    browser.forward()
    time.sleep(1)
    browser.close()
    上述方法用法

     三:鼠标事件

    方法

    说明

    ActionChains(driver)

    构造ActionChains对象

    context_click()

    右击

    move_to_element(above)

    鼠标悬停

    double_click()

    双击

    drag_and_drop()

    拖动

    perform()

    执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作

     

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    browser=webdriver.Chrome()
    browser.get("https://www.baidu.com")
    
    #定位要悬停的元素
    element=browser.find_element_by_link_text("设置")
    #对定位到的元素执行鼠标悬停操作
    ActionChains(browser).move_to_element(element).perform()
    move_to_element(element)
    1 import time
    2 browser=webdriver.Chrome()
    3 browser.get("https://www.baidu.com")
    4 #定位要悬停的元素
    5 
    6 element=browser.find_element_by_link_text("设置")
    7 ActionChains(browser).context_click(element).perform()
    8 
    9 time.sleep(10)
    context_click

     三:键盘事件

    方法

    说明

    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

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys#导入keys模块
    import time
    browser=webdriver.Chrome()
    browser.get("https://www.baidu.com")
    
    #定位要悬停的元素
    element=browser.find_element_by_xpath("//input[@id='kw']")
    element.send_keys("python")
    time.sleep(1)
    
    element.send_keys(Keys.BACK_SPACE)#Backspace按键
    element.send_keys(Keys.RETURN)#回车
    
    time.sleep(10)
    Keys模块使用

    方法

    说明

    send_keys(Keys.CONTROL,‘a’)

    全选(Ctrl+A

    send_keys(Keys.CONTROL,‘c’)

    复制(Ctrl+C

    send_keys(Keys.CONTROL,‘x’)

    剪切(Ctrl+X

    send_keys(Keys.CONTROL,‘v’)

    粘贴(Ctrl+V

    send_keys(Keys.F1…Fn)

    键盘 F1…Fn


     四.获取断言信息

    方法

    说明

    title

    用于获得当前页面的标题

    current_url

    用户获得当前页面的URL

    text

    获取搜索条目的文本信息

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys#导入keys模块
    import time
    browser=webdriver.Chrome()
    browser.get('https://www.baidu.com')
    
    print(browser.current_url)
    print(browser.title)
    

     五.设置元素等待:

    http://www.testclass.net/selenium_python/element-wait/

    六:多表单切换

       在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

    以126网站为例

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys#导入keys模块
    import time
    
    #生成浏览器对象
    driver=webdriver.Chrome()
    driver.get("https://mail.126.com/")
    
    #点击以用户名,密码登录
    element=driver.find_element_by_partial_link_text("密码登录")
    element.click()
    
    #定位iframe,由于这里的iframe和id是动态的,所以只能这样去查找
    t=driver.find_elements_by_tag_name('iframe')[0]#利用iframe标签去定位iframe
    driver.switch_to_frame(t)#将定位的iframe对象作为参数,切换到这个iframe
    username=driver.find_element_by_name('email')
    
    username.clear()
    username.send_keys(input("输入用户名"))
    

    定位iframe的方法

      1.有id,并且唯一,直接写id
        driver.switch_to_frame("x-URS-iframe")
        driver.switch_to.frame("x-URS-iframe")

      2.有name,并且唯一,直接写name
        driver.switch_to_frame("xxxx")
        driver.switch_to.frame("xxxx")

      3.无id,无name,先定位iframe元素
        iframe = driver.find_elements_by_tag_name("iframe")[0]
        driver.switch_to_frame(iframe)
        driver.switch_to.frame(iframe)


     七:多窗口切换

      在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换

    方法

    说明

    current_window_handle

    获得当前窗口句柄

    window_handles

    返回所有窗口的句柄到当前会话

           switch_to.window()

     

    用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换

     js = 'window.open("https://www.sogou.com");'
    browser.execute_script(js)
    打开新的窗口

    window

     八:警告框处理

      在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。

    方法

    说明

    Text

    返回 alert/confirm/prompt 中的文字信息

    accept()

    接受现有警告框

    dismiss()

    解散现有警告框

    send_keys(keysToSend)

    发送文本至警告框。keysToSend:将文本发送至警告框。

     1 from selenium import webdriver
     2 from selenium.webdriver.common.action_chains import ActionChains
     3 from selenium.webdriver.common.keys import Keys#导入keys模块
     4 import time
     5 broswer=webdriver.Chrome()
     6 broswer.implicitly_wait(10)
     7 broswer.get("https://www.baidu.com")
     8 
     9 #鼠标悬停至"设置"链接
    10 link=broswer.find_element_by_link_text("设置")
    11 ActionChains(broswer).move_to_element(link).perform()
    12 time.sleep(5)
    13 #打开搜索设置
    14 broswer.find_element_by_link_text("搜索设置").click()
    15 
    16 #在此处设置等待2s否则会报错
    17 time.sleep(5)
    18 
    19 #保存设置
    20 
    21 broswer.find_element_by_class_name('prefpanelgo').click()
    22 time.sleep(5)
    23 
    24 broswer.switch_to.alert.accept()#相当于确认了弹窗信息
    25 broswer.switch_to.alert.dismiss()
    26 print(broswer.switch_to.alert.text)#输出弹窗内容
    演示

     九:下拉框选择操作

      导入选择下拉框Select类,使用该类处理下拉框操作

      from selenium.webdriver.support.select import Select

    方法

    说明

    select_by_value(“选择值”)

    相当于我们使用鼠标选择下拉框的值

     

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys#导入keys模块
    import time
    broswer=webdriver.Chrome()
    broswer.implicitly_wait(10)
    broswer.get("https://www.baidu.com")
    
    #鼠标悬停至"设置”链接
    broswer.find_element_by_link_text("设置").click()
    time.sleep(2)
    
    #打开搜索设置
    broswer.find_element_by_link_text("搜索设置").click()
    time.sleep(2)
    
    #搜索结果显示条数
    sel=broswer.find_element_by_xpath("//select[@id='nr']")#查找select标签
    Select(sel).select_by_value('50')#设置select内的值为50
    time.sleep(3)
    演示

    十:文件上传          

             对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。                                                                                                                                                                                                                                  

     1 from selenium import webdriver
     2 from selenium.webdriver.support.select import Select
     3 from selenium.webdriver.common.action_chains import ActionChains
     4 from selenium.webdriver.common.keys import Keys#导入keys模块
     5 import time
     6 broswer=webdriver.Chrome()
     7 broswer.implicitly_wait(10)
     8 broswer.get("http://upload.fx678.com/")
     9 找到上传文件的Input标签
    10 file=broswer.find_element_by_name('file')
    11 #找到上传文件的按钮
    12 submit=broswer.find_element_by_class_name("btn")
    13 #使用sendkeys发送路径
    14 file.send_keys(r"C:UsersLenovoDesktop资料一句话\xx.jpg")
    15 submit.click()
    文件上传

    十一:Cookie操作

      有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

    方法

    说明

    Get_cookies()

    获得所有的cookie信息

    Get_cookie(name)

    返回字典的key为“name”的cookie信息

    add_cookie(cookie_dict)

    添加cookie。“cookie_dict”指字典对象,必须有name 和value 值

    delete_cookie(name,optionsString)

    删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”

    delete_all_cookies()

    删除所有cookie信息

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys#导入keys模块
    import time
    browser=webdriver.Chrome()
    browser.get("http://www.youdao.com")
    
    #打印cookie信息
    print("cookie:",browser.get_cookies())
    #添加cookie信息
    dict={'name':'alex','value':'yes'}
    browser.add_cookie(dict)
    print("addcookie:",browser.get_cookies())
    #删除一个cookie
    browser.delete_cookie('path')
    print('delete cookie:',browser.get_cookies())
    #删除所有cookie
    browser.delete_all_cookies()
    print("all cookies:",browser.get_cookies())
    演示

    十二:浏览器滚动条

      可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。

    # browser.get('https://www.autohome.com.cn/beijing/')
    #browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')#滚动到最下方
    # time.sleep(2)
    # element=browser.find_element_by_id('auto-header-citypop-tip-list')
    #browser.execute_script('arguments[0].scrollIntoView();",element')
    #browser.execute_script("window.scrollBy(80,-1100)")#相对当前位置移动,负数向上移
    #browser.execute_script("window.scrollTo(50,2000)")#移动到窗口绝对位置坐标,x左右移,y上下移
    #browser.execute_script("arguments[0].scrollIntoView(false)",element)#移动到元素element对象的低端与当前窗口的底部对齐
    #browser.execute_script('window.scrollTo(0,0)')#移动到最顶端
    #browser.execute_script('alert("To Bottom")')#弹出警告框
    View Code

    本文引用博客 https://blog.csdn.net/weixin_36279318/article/details/79475388

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

      

     

     

     

     

  • 相关阅读:
    史上最全的正则表达式-匹配中英文、字母和数字
    使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug
    装了Yaml 然后代码一运行就报错 YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe.
    mac安装yaml
    如何获取android app的package和Activity
    Original error: No Chromedriver found that can automate Chrome '39.0.0'.
    mac chromedriver安装
    keycode相关方法
    python+appium的物理按键代码
    Python测试Websocket接口
  • 原文地址:https://www.cnblogs.com/Mr-l/p/11399071.html
Copyright © 2011-2022 走看看