zoukankan      html  css  js  c++  java
  • 【Python 库】Selenium 的使用

    创建一个浏览器对象

    from selenium import webdriver
    browser = webdriver.Chrome()

    WebDriver在将控制权返回给测试脚本之前,会一直等待到页面完全加载完毕,但如果页面使用了很多AJAX,WebDriver可能无法准确判断页面是否完全加载。

    打开页面

    browser.get("https://www.baidu.com")

    不能省略http:// 或 https://

    获取页面源码

    html = browser.page_source

    定位HTML元素

    定位一个元素

    含义

    find_element_by_tag_name

    通过标签定位

    find_element_by_id

    通过元素id定位

    find_element_by_name

    通过元素name定位

    find_element_by_class_name

    通过类名进行定位

    find_element_by_css_selector

    通过css选择器进行定位

    find_element_by_xpath

    通过xpath表达式定位(xpath和xml中的类似)

    find_element_by_link_text

    通过完整超链接文本定位(不是通过超链接的地址,而是超链接上面的文字描述)

    find_element_by_partial_link_text

    通过部分链接定位

    如果没有发现任何元素,将会抛出NoSuchElementException异常。

    以上的方法仅返回第一个满足条件的元素,如果要返回多个元素,需要使用find_elements_by_xx。

    输入文本

    element.send_keys("selenium")

    你输入的字符将会被添加在已有文本之后。如果传入多个文本,将依次添加。

    在输入框中输入的字符不会自动清空,你可以使用clear方法输入区域的内容。

    element.Clear()

    快捷键

    from selenium.webdriver.common.keys import Keys
    element.send_keys(Keys.BACKSPACE)    # 删除键
    element.send_keys(keys.ENTER)        # 回车键
    element.send_keys(Keys.SPACE)        # 空格键
    element.send_keys(Keys.CONTROL, 'a')    # Ctrl+A
    element.send_keys(Keys.CONTROL, 'c')    # Ctrl+C

    点击按钮

    element.click()

    定位下拉框(select)

    方法一:先定位select,再定位option选项。

    browser.find_element_by_id("sel").find_element_by_xpath("//option[@value='晴']").click()

    方法二:直接xpath定位。

    browser.find_element_by_xpath("//*[@id='sel']/option[3]").click()

    方法三:select模块定位

    from selenium.webdriver.support.select import Select
    element = browser.find_element_by_id("sel")
    Select(element).select_by_index(2).click() # index 从0开始
    Select(element).select_by_value('')
    Select(element).select_by_visible_text('')

    用Select定位后会直接选中不需要click()方法选中,也没有click()方法。

    Select中的其他方法如下:

    deselect_all() # 取消所有选项
    deselect_by_index() # 取消对应 index 选项
    deselect_by_value() # 取消对应 value 选项
    deselect_by_visible_text() # 取消对应文本选项

    以上方法需要select支持多选(multiple="true")

    单选框(radio)复选框(checkbox)

    element = browser.find_element_by_id('yes')
    element.click()

    就是定位HTML元素,没啥花样。

    判断是否选中

    browser.find_element_by_id('yes').is_selected()

    判断是否可见

    有些元素设置了display:none,这时候如果直接操作这种隐藏的元素,会报错:element not visible。

    element.is_displayed()

    定位弹框

    1alert弹框

    alertElement = browser.switch_to_alert()
    print(alertElement.text) # 获取对话框文本值
    alertElement.accept() # 点击确认按钮

    在现在的版本中,browser.switch_to_alert()已经过时了,

    改成:alertElement = browser.switch_to.alert

    2confirm弹框

    confirm alert 是一样的,只是多了个点击取消按钮的方法。

    confirmElement = browser.switch_to.alert
    print(confirmElement.text) # 获取对话框文本值
    confirmElement.dismiss() # 点击取消按钮

    3prompt弹框

    prompt 又多了个输入框,send_keys 方法即可。

    执行JS

    js = "$('#sp').toggle();"
    browser.execute_script(js)

    退出

    browser.quit()

    示例:

    为了测试,我们新建一个htnl网页

    <html>
    <head>
    <title>SeleniumTest</title>
    <script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
    
    <style type="text/css">
    tr{
    height: 40px}
    </style>
    </head>
    <body>
    <table style="margin: 200px auto;">
    <tr>
    <td><input type="text" /></td>
    </tr>
    <tr>
    <td><input type="text" id="txt1" /></td>
    </tr>
    <tr>
    <td><input type="text" id="txt2" name="txt2" /></td>
    </tr>
    <tr>
    <td><input type="text" class="c1" /></td>
    </tr>
    <tr>
    <td><input type="text" class="c2" /></td>
    </tr>
    <tr>
    <td><input type="text" id="txt6" /></td>
    </tr>
    <tr>
    <td><span id="sp" style="display:none">隐藏的标签</span></td>
    </tr>
    <tr>
    <td>
    <a href="javascript:;">aaa</a>
    <a href="https://www.baidu.com" target="_blank">bbb</a>
    <a href="https://baike.baidu.com/" target="_blank">ccc</a>
    </td>
    </tr>
    <tr>
    <td>
    <select id="sel">
    <option value="无"></option>
    <option value="晴"></option>
    <option value="阴"></option>
    <option value="雨"></option>
    <option value="多云">多云</option>
    </select>
    </td>
    </tr>
    <tr>
    <td>
    <input type="radio" id="yes" /><input type="radio" id="no" /></td>
    </tr>
    <tr>
    <td>
    <input type="checkbox" id="chk1" name="chk" />语文
    <input type="checkbox" id="chk2" name="chk" />数学
    <input type="checkbox" id="chk3" name="chk" />英语
    </td>
    </tr>
    <tr>
    <td>
    <input type="button" id="btn1" value="警告消息框" onclick="alert('警告警告')" />
    <input type="button" id="btn2" value="确认消息框" onclick="confirm('是否确认')" />
    <input type="button" id="btn3" value="提示消息框" onclick="prompt('提示注意')" />
    <input type="button" id="btn4" value="显示" onclick="$('#sp').toggle();" />
    </td>
    </tr>
    </table>
    </body>
    </html>

    Python代码:

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.common.keys import Keys
    import time browser = webdriver.Chrome() # 创建浏览器对象 browser.get("http://localhost:8001/") # 打开网址 time.sleep(2) # 定位html元素 txt1 = browser.find_element_by_tag_name('input') txt1.send_keys('tag_name=input') # 输入文本 txt2 = browser.find_element_by_id('txt1') txt2.send_keys('id=txt1') txt3 = browser.find_element_by_name('txt2') txt3.send_keys('name=txt2') txt4 = browser.find_element_by_class_name('c1') txt4.send_keys('class_name=c1') txt5 = browser.find_element_by_css_selector('.c2') txt5.send_keys('css=.c2') txt6 = browser.find_element_by_xpath("//input[@id='txt6']") txt6.send_keys("xpath=//input[@id='txt6']") a1 = browser.find_element_by_link_text('bbb') # a1.click() txt1.clear() # 清空文本 time.sleep(2) # 快捷键 txt2.send_keys(Keys.CONTROL, 'a') time.sleep(1) txt2.send_keys(Keys.CONTROL, 'c') time.sleep(1) txt2.send_keys(Keys.BACKSPACE) time.sleep(1) txt2.send_keys(Keys.CONTROL, 'v') time.sleep(2) # 定位下拉框 browser.find_element_by_id("sel") .find_element_by_xpath("//option[@value='晴']").click() time.sleep(1) browser.find_element_by_xpath("//*[@id='sel']/option[3]").click() # 用Select模块定位 element = browser.find_element_by_id("sel") Select(element).select_by_index(2) # index 从0开始 time.sleep(1) Select(element).select_by_value('') time.sleep(1) Select(element).select_by_visible_text('') # 单选框 element = browser.find_element_by_id('yes') element.click() print(element.is_selected()) # 复选框 browser.find_element_by_id('chk1').click() # 判断元素是否可见 print(browser.find_element_by_id('sp').is_displayed()) # alert弹框 browser.find_element_by_id('btn1').click() alertElement = browser.switch_to.alert print(alertElement.text) # 获取对话框文本值 alertElement.accept() # 点击确认按钮 # confirm弹框 browser.find_element_by_id('btn2').click() confirmElement = browser.switch_to.alert print(confirmElement.text) # 获取对话框文本值 confirmElement.dismiss() # 点击取消按钮 # 执行JS js = "$('#sp').toggle();" browser.execute_script(js) # 退出 browser.quit()

    element.is_displayed()

  • 相关阅读:
    Jmeter学习笔记-初级
    python selenium利用 126.com id自动生成
    Python代码无法保存
    卸载python2.7出错
    python pip用法
    pycharm 连接数据库
    Python打包PyPI上传实践
    Python实现Api的Mock测试
    抓包工具使用
    Jenkins+Ant可持续集成Jmeter脚本
  • 原文地址:https://www.cnblogs.com/gl1573/p/9453508.html
Copyright © 2011-2022 走看看