• 5.软件测试-----自动化测试


    目录

    一、自动化测试

    1.单元自动化测试

    2.接口自动化测试

    3.UI自动化测试 

    4.自动化测试工具Selenium 

    5.Webdriver

    二、一个简单自动化脚本的构成

    三、一些基本的webdriver API

    1.一个元素的定位

    1.1通过id定位元素

    1.2通过name定位元素

    1.3通过class_name定位

    1.4通过tag_name定位

    1.5 通过link_text定位

    1.6通过partial_link_text定位

    1.7通过xpath定位

    1.8通过css_selector定位

    2.操作测试对象

    2.1click 点击对象

    2.2send_keys 在对象上模拟按键输入

    2.3clear 清除对象输入的文本内容

    2.4submit 提交

    2.5text 用于获取元素的文本信息

    3.鼠标点击与键盘输入 

    4.添加等待

    4.1固定等待

    4.2智能等待

    5.打印信息

    5.1打印title

    5.2打印url

    6.对浏览器的操作

    6.1浏览器最大化

    6.2设置浏览器宽、高

    6.3操作浏览器的前进、后退

    6.4控制浏览器滚动条

    7.键盘事件

    7.1键盘按键用法

    7.2键盘组合键用法

    8.鼠标事件

    9.定位一组元素

    10.多层框架/窗口定位

    11.下拉框处理

    12.alert、confirm、prompt 的处理

     13.DIV块的处理

    14.上传文件操作


    一、自动化测试

    自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最 后评估运行结果。将人为驱动的测试行为转化为机器执行的过程

    1.单元自动化测试

     使用JUnit进行单元测试

    2.接口自动化测试

    项目前期接口开发完成开始进行测试,适合接口变动比较小的项目

    常见的接口自动化测试工具有,RobotFramework,JMeter,SoapUI,TestNG+HttpClient,Postman 等。

    接口自动化的特点:

    可在产品前期,接口完成后介入

    用例维护量小

    适合接口变动较小,界面变动频繁的项目

    3.UI自动化测试 

    对系统的界面元素进行操作,用脚本实现模拟用户的使用,完成功能的 正常和异常测试

    UI自动化的特点:

    用例维护量大

    页面相关性强,必须后期项目页面开发完成后介入

    UI测试适合与界面变动较小的项目

    UI自动化的好处:

    可以进行回归测试

    节约了资源

    是一种可靠的测试方法,机器不会出错

    可以完成很多繁琐的工作

    能够完成手工测试无法完成的测试

    4.自动化测试工具Selenium 

    Selenium IDE一个用于Selenium测试的完成集成开发环境,可以直接录制在浏览器的用户操作,并且 能回放,编辑和调试测试脚本。调试过程中可以逐步进行或调整执行的速度,并且可以在底部浏览日志 出错信息。 录制的测试脚本可以以多种语言导出,比如java,C#,Python,Ruby等,方便掌握不同语言的测试人 员操作。

    支持多语言:Java、C#、ruby、JavaScript、Python

    支持多平台:Linux、Windows、Mac,可以进行兼容性测试

    支持多浏览器:Chrome、FireFox、Edge、Opera、Safari

    支持分布式测试:SeleniumGrid

    5.Webdriver

    Selenium RC 在浏览器中运行 JavaScript 应用,会存在环境沙箱问题,而WebDriver可以跳出 JavaScript的沙箱,针对不同的浏览器创建更健壮的,分布式的,跨平台的自动化测试脚本。基于特定语言(Java,C#,Python,Ruby,Perl,JavaScript等)绑定来驱动浏览器对Web元素进行操作和验证。

    webdriver的工作原理:

    • 启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为 webdriver的remote server。
    • 客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格 式的字符串来告诉Selenium我们希望浏览器接下来做什么事情)。
    • Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。

    二、一个简单自动化脚本的构成

    1. # coding = utf-8
    2. from selenium import webdriver
    3. import time
    4. from selenium.webdriver.common.by import By
    5. browser = webdriver.Edge()
    6. time.sleep(3)
    7. browser.get("http://www.baidu.com")
    8. time.sleep(3)
    9. browser.find_element(by=By.ID, value='kw').send_keys('自动化测试')
    10. time.sleep(3)
    11. browser.find_element(by=By.ID, value='su').click()
    12. browser.quit()
    • coding = utf-8 防止乱码,在编辑器里面可以不用加,因为编辑器默认的就是UTF-8模式。
    • from selenium import webdriver 导入webdriver工具包,这样就可以使用里面的API browser = webdriver.Edge() 获得被控制浏览器的驱动,这里是获得Edge的,当然还可以获得Chrome浏览器,不过要想使这一段 代码有效,必须安装相应的浏览器驱动。
    • browser.find_element(by=By.ID, value='kw').send_keys('自动化测试')通过元素的ID定位想要操作的元素,并且向元素输入相应的文本内容 。
    • browser.find_element(by=By.ID, value='su').click()通过元素的ID定位到元素,并进行点击操作。 browser.quit() 退出并关闭窗口。

    三、一些基本的webdriver API

    1.一个元素的定位

    以百度输入框为例

    1. # coding = utf-8
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. driver.get("http://www.baidu.com")
    7. time.sleep(3)

    1.1通过id定位元素

    如果id存在,那么可以全局唯一的定位一个元素

    1. # 通过ID来定位,是全局唯一的,可以唯一定位一个元素
    2. driver.find_element(by=By.ID, value='kw').send_keys('python')
    3. driver.find_element(by=By.ID, value='su').click()
    4. driver.quit()

    1.2通过name定位元素

    只有当name存在并且全局唯一才可以定位一个元素

    1. # 通过name来定位,name定位不是唯一的
    2. driver.find_element(by=By.NAME,value="wd").send_keys("python")
    3. driver.find_element(by=By.ID,value="su").click()
    4. driver.quit()

    1.3通过class_name定位

    只有当class name存在并且全局唯一才可以定位一个元素

    1. # 通过class_name定位
    2. driver.find_element(by=By.CLASS_NAME, value="s_ipt").send_keys("python")
    3. driver.find_element(by=By.ID, value="su").click()
    4. driver.quit()

    1.4通过tag_name定位

    只有当tag name存在并且全局唯一才可以定位一个元素

    1. # 通过tag name定位
    2. driver.find_element(by=By.TAG_NAME, value="type").send_keys("python")
    3. time.sleep(3)
    4. driver.find_element(by=By.ID, value="su").click()
    5. driver.quit()

    事实上使用tag name定位百度搜索框时是定位不成功的,会报错,因为只有当tag name全局唯一时才可以进行定位

    必须是链接,而且链接内容是全局唯一的才可以定位到元素

    1. # 通过link_text定位
    2. driver.find_element(by=By.LINK_TEXT, value="新闻").click()
    3. driver.quit()

    必须是链接,而且链接内容是全局唯一的才可以定位到元素

    1. # 通过partial_link_text定位
    2. driver.find_element(by=By.PARTIAL_LINK_TEXT, value="123").click()
    3. driver.quit()

    1.7通过xpath定位

    所有元素都可以通过xpath定位

    1. # 通过xpath定位
    2. driver.find_element(by=By.XPATH, value="//*[@id='kw']").send_keys("python")
    3. driver.find_element(by=By.XPATH, value="//*[@id='su']").click()
    4. driver.quit()

    1.8通过css_selector定位

    1. # 通过css_selector定位
    2. driver.find_element(by=By.CSS_SELECTOR, value="#kw").send_keys("python")
    3. driver.find_element(by=By.CSS_SELECTOR, value="#su").click()
    4. driver.quit()

    2.操作测试对象

    定位之后需要对这个元素进行操作。是鼠标点击 还是键盘输入,或者清除元素的内容,或者提交表单等。这个取决于定位元素需要进行的下一步操作。

    2.1click 点击对象

    driver.find_element(by=By.ID, value='su').click()

    2.2send_keys 在对象上模拟按键输入

    driver.find_element(by=By.ID, value='kw').send_keys('python')

    2.3clear 清除对象输入的文本内容

    1. driver.find_element(by=By.ID, value="kw").send_keys("自动化")
    2. driver.find_element(by=By.ID, value="kw").clear()
    3. driver.find_element(by=By.ID, value="kw").send_keys("测试")
    4. driver.find_element(by=By.ID, value="su").click()
    5. driver.quit()

    2.4submit 提交

    driver.find_element(by=By.ID, value="su").submit()

    2.5text 用于获取元素的文本信息

    1. text = driver.find_element(by=By.ID, value="bottom_layer").text
    2. print(text)

    3.鼠标点击与键盘输入 

    4.添加等待

    4.1固定等待

    引入time 包,就可以在脚本中自由的添加休眠时间了,这里的休眠指固 定休眠

    1. import time
    2. time.sleep(5)

    4.2智能等待

    通过添加implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait()的用法比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

    1. # coding = utf-8
    2. from selenium import webdriver
    3. from selenium.webdriver.common.by import By
    4. browser = webdriver.Chrome()
    5. browser.get("http://www.baidu.com")
    6. # 隐式等待30秒
    7. browser.implicitly_wait(30)
    8. browser.find_element(by=By.ID, value="kw").send_keys("selenium")
    9. browser.find_element(by=By.ID, value="su").click()
    10. browser.quit()

    5.打印信息

    5.1打印title

    1. from selenium import webdriver
    2. driver = webdriver.Edge()
    3. driver.get("http://www.baidu.com")
    4. title = driver.title
    5. print(title)
    6. driver.quit()

    5.2打印url

    1. from selenium import webdriver
    2. driver = webdriver.Edge()
    3. driver.get("http://www.baidu.com")
    4. url = driver.current_url
    5. print(url)
    6. driver.quit()

    6.对浏览器的操作

    6.1浏览器最大化

    browser.maximize_window()

    6.2设置浏览器宽、高

    driver.set_window_size(400, 1000)

    6.3操作浏览器的前进、后退

    1. # 浏览器后退
    2. driver.back()
    3. # 浏览器前进
    4. driver.forward()

    6.4控制浏览器滚动条

    浏览器滚动条的控制需要依靠js脚本

    1. #将浏览器滚动条滑到最顶端
    2. document.documentElement.scrollTop=0
    3. #将浏览器滚动条滑到最底端
    4. document.documentElement.scrollTop=10000
    1. # 浏览器滚动条的控制
    2. js0 = "var q=document.documentElement.scrollTop=0"
    3. driver.execute_script(js0)
    4. time.sleep(3)
    5. js1 = "var q=document.documentElement.scrollTop=10000"
    6. driver.execute_script(js1)
    7. time.sleep(2)
    8. driver.quit()

    7.键盘事件

    所有的键盘操作,必须建立在定位到元素的基础上,操作都是基于元素来进行

    7.1键盘按键用法

    要使用键盘按键,必须引入keys 包: from selenium.webdriver.common.keys import Keys

    过send_keys()调用按键:

    send_keys(Keys.TAB) # TAB

    send_keys(Keys.ENTER) # 回车

    send_keys(Keys.SPACE) #空格键

    send_keys(Keys.ESCAPE) #回退键(Esc)

    7.2键盘组合键用法

    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)

    1. from selenium import webdriver
    2. import time
    3. from selenium.webdriver import Keys
    4. from selenium.webdriver.common.action_chains import ActionChains
    5. from selenium.webdriver.common.by import By
    6. driver = webdriver.Edge()
    7. driver.get("http://www.baidu.com/")
    8. # 浏览器的最大化
    9. driver.maximize_window()
    10. driver.find_element(by=By.ID, value="kw").send_keys("元旦快乐")
    11. driver.find_element(by=By.ID, value="su").click()
    12. # Ctrl+A Ctrl+C Ctrl+X
    13. # 用剪贴的方式clear掉文本框中的输入内容
    14. driver.find_element(by=By.ID, value="kw").send_keys(Keys.CONTROL, 'a')
    15. time.sleep(3)
    16. driver.find_element(by=By.ID, value="kw").send_keys(Keys.CONTROL, 'x')
    17. time.sleep(4)
    18. #
    19. driver.find_element(by=By.ID, value="kw").send_keys("新年快乐")
    20. driver.find_element(by=By.ID, value="su").click()
    21. time.sleep(2)
    22. driver.quit()

    8.鼠标事件

    要使用鼠标事件需要导入工具包: from selenium.webdriver.common.action_chains import ActionChains

    1. #鼠标拖动事件
    2. ActionChains(driver).move_to_element(element).perform()

    ActionChains 类

    context_click() 右击

    double_click() 双击

    drag_and_drop() 拖动

    move_to_element() 移动

    1. from selenium import webdriver
    2. import time
    3. from selenium.webdriver.common.by import By
    4. from selenium.webdriver.common.action_chains import ActionChains
    5. driver = webdriver.Edge()
    6. driver.get("http://www.baidu.com/")
    7. # 浏览器的最大化
    8. driver.maximize_window()
    9. driver.find_element(by=By.ID, value="kw").send_keys("你好")
    10. driver.find_element(by=By.ID, value="su").click()
    11. b = driver.find_element(by=By.ID, value="su")
    12. # 双击
    13. # ActionChains(driver).double_click(b).perform()
    14. # time.sleep(5)
    15. # 右击
    16. ActionChains(driver).context_click(b).perform()
    17. time.sleep(8)
    18. driver.quit()

    9.定位一组元素

    webdriver 可以很方便的使用findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一 组对象,这时候就需要使用findElements 方法。

    定位一组对象一般用于以下场景:

    • 批量操作对象,比如将页面上所有的checkbox 都勾上
    • 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的 checkbox,然后选择最后一个

    以下面一个html为例子 

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Checkboxtitle>
    6. head>
    7. <body>
    8. <h3>checkboxh3>
    9. <div class="well">
    10. <form class="form-horizontal">
    11. <div class="control-group">
    12. <label class="control-label" for="c1">checkbox1label>
    13. <div class="controls">
    14. <input type="checkbox" id="c1" />
    15. div>
    16. div>
    17. <div class="control-group">
    18. <label class="control-label" for="c2">checkbox2label>
    19. <div class="controls">
    20. <input type="checkbox" id="c2" />
    21. div>
    22. div>
    23. <div class="control-group">
    24. <label class="control-label" for="c3">checkbox3label>
    25. <div class="controls">
    26. <input type="checkbox" id="c3" />
    27. div>
    28. div>
    29. <div class="control-group">
    30. <label class="control-label" for="r1">radiolabel>
    31. <div class="controls">
    32. <input type="radio" id="r1" />
    33. div>
    34. div>
    35. <div class="control-group">
    36. <label class="control-label" for="r2">radiolabel>
    37. <div class="controls">
    38. <input type="radio" id="r2" />
    39. div>
    40. div>
    41. form>
    42. div>
    43. body>
    44. html>

    如果我们需要把这些复选框和单选框全部点击,按照我们之前的定位一个元素可以完成我们的要求

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///" +os.path.abspath("E:\\测试\\html\\selenium_html\\checkbox.html")
    7. driver.get(url)
    8. time.sleep(2)
    9. driver.maximize_window()
    10. driver.find_element(by=By.ID, value="c1").click()
    11. driver.find_element(by=By.ID, value="c2").click()
    12. driver.find_element(by=By.ID, value="c3").click()
    13. driver.find_element(by=By.ID, value="r1").click()
    14. driver.find_element(by=By.ID, value="r2").click()
    15. time.sleep(2)
    16. driver.quit()

    虽然这样是可以定位到元素的,但是一旦需要定位的元素变多,那么这个方法就不是很适用了,我们可以定位一组元素,我们可以先定位出同一个类,然后再定位我们需要的元素

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///" +os.path.abspath("E:\\测试\\html\\selenium_html\\checkbox.html")
    7. driver.get(url)
    8. time.sleep(2)
    9. driver.maximize_window()
    10. # 定位一组元素
    11. buttons = driver.find_elements(by=By.TAG_NAME, value="input")
    12. for button in buttons:
    13. if button.get_attribute("type") == "checkbox" or button.get_attribute("type") == "radio":
    14. button.click()
    15. time.sleep(2)
    16. driver.quit()

    10.多层框架/窗口定位

    对于一个web 应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来 了一定的困难。

    定位一个frame :switch_to.frame(name_or_id_or_frame_element)

    定位一个窗口window:switch_to.window(name_or_id_or_frame_element)

    多层框架的定位

    1. <html>
    2. <head>
    3. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    4. <title>frametitle>
    5. <link
    6. href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra
    7. p-combined.min.css" rel="stylesheet" />
    8. <script type="text/javascript">$(document).ready(function(){
    9. });
    10. script>
    11. head>
    12. <body>
    13. <div class="row-fluid">
    14. <div class="span10 well">
    15. <h3>frameh3>
    16. <iframe id="f1" src="inner.html" width="800",
    17. height="600">iframe>
    18. div>
    19. div>
    20. body>
    21. <script
    22. src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.
    23. min.js">script>
    24. html>

    inner.html

    1. <html>
    2. <head>
    3. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    4. <title>innertitle>
    5. head>
    6. <body>
    7. <div class="row-fluid">
    8. <div class="span6 well">
    9. <h3>innerh3>
    10. <iframe id="f2" src="https://blog.csdn.net/"
    11. width="700"height="500">iframe>
    12. <a href="javascript:alert('watir-webdriver better than
    13. selenium webdriver;')">clicka>
    14. div>
    15. div>
    16. body>
    17. html>

    如果我们需要定位到最里面嵌套的页面元素,可以使用switch_to.frame(name_or_id_or_frame_element)方法

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\frame.html")
    7. driver.get(url)
    8. time.sleep(2)
    9. driver.switch_to.frame("f1")
    10. driver.switch_to.frame("f2")
    11. driver.find_element(by=By.ID, value="toolbar-search-input").send_keys("自动化测试")
    12. time.sleep(2)
    13. driver.quit()

    多层窗口定位

    有时候嵌套的不是框架,而是窗口,可以使用: switch_to.window("windowName")

    1. <html>
    2. <head>
    3. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    4. <title>Level Locatetitle>
    5. <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js">script>
    6. <link
    7. href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
    8. head>
    9. <body>
    10. <h3>Level locateh3>
    11. <div class="span3">
    12. <div class="well">
    13. <div class="dropdown">
    14. <a class="dropdown-toggle" data-toggle="dropdown"
    15. href="#">Link1a>
    16. <ul class="dropdown-menu" role="menu"
    17. aria-labelledby="dLabel" id="dropdown1" >
    18. <li><a tabindex="-1" href="#">Actiona>li>
    19. <li><a tabindex="-1" href="#">Another actiona>li>
    20. <li><a tabindex="-1" href="#">Something else herea>li>
    21. <li class="divider">li>
    22. <li><a tabindex="-1" href="#">Separated linka>li>
    23. ul>
    24. div>
    25. div>
    26. div>
    27. <div class="span3">
    28. <div class="well">
    29. <div class="dropdown">
    30. <a class="dropdown-toggle" data-toggle="dropdown"
    31. href="#">Link2a>
    32. <ul class="dropdown-menu" role="menu"
    33. aria-labelledby="dLabel" >
    34. <li><a tabindex="-1" href="#">Actiona>li>
    35. <li><a tabindex="-1" href="#">Another actiona>li>
    36. <li><a tabindex="-1" href="#">Something else herea>li>
    37. <li class="divider">li>
    38. <li><a tabindex="-1" href="#">Separated linka>li>
    39. ul>
    40. div>
    41. div>
    42. div>
    43. body>
    44. <script
    45. src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js">script>
    46. html>

     先点击显示出1个下拉菜单,然后再定位到该下拉菜单所在的ul,再定位这个ul 下的某个 具体的link。在这里,我们定位第Link1下拉菜单中的Action 这个选项

    1. import os.path
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. from selenium.webdriver.common.action_chains import ActionChains
    6. driver = webdriver.Edge()
    7. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\level_locate.html")
    8. driver.get(url)
    9. driver.maximize_window()
    10. time.sleep(2)
    11. # 先定位Link1
    12. driver.find_element(by=By.LINK_TEXT, value="Link1").click()
    13. time.sleep(2)
    14. # 再定位Action
    15. action = driver.find_element(by=By.LINK_TEXT, value="Action")
    16. # 最后把鼠标移动到Action上
    17. ActionChains(driver).move_to_element(action).perform()
    18. time.sleep(2)
    19. driver.quit()

    11.下拉框处理

    对于一般的元素,我们只需要一次就定位,但下拉框里的内容需 要进行两次定位,先定位到下拉框对下拉框进行操作后,再定位到下拉框内里的选项。

    现在定位选择下拉列表里的$10.69

    1. import os.path
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\drop_down.html")
    7. driver.get(url)
    8. time.sleep(2)
    9. # options = driver.find_elements(by=By.TAG_NAME, value="option")
    10. # time.sleep(2)
    11. # options[3].click()
    12. options = driver.find_elements(by=By.TAG_NAME, value="option")
    13. for option in options:
    14. if option.get_attribute('value') == '10.69':
    15. time.sleep(1)
    16. option.click()
    17. time.sleep(1)
    18. time.sleep(2)
    19. driver.quit()

    12.alert、confirm、prompt 的处理

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

    accept() 点击确认按钮

    dismiss() 点击取消按钮,如果有的话 send_keys 输入值,如果alert 没有对话框就不能用了,不然会报错 注意:

    switch_to.alert()只能处理原生的alert

    使用switch_to.alert中的accept() 来确认警告框

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\alert.html")
    7. driver.get(url)
    8. driver.maximize_window()
    9. time.sleep(2)
    10. driver.find_element(by=By.ID, value="tooltip").click()
    11. time.sleep(2)
    12. alert = driver.switch_to.alert
    13. time.sleep(3)
    14. alert.accept()
    15. time.sleep(1)
    16. driver.quit()

    对于需要我们输入的弹框,可以使用alert.send_keys()来输入信息

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\send.html")
    7. driver.get(url)
    8. driver.maximize_window()
    9. time.sleep(2)
    10. driver.find_element(by=By.TAG_NAME, value="input").click()
    11. time.sleep(2)
    12. alert = driver.switch_to.alert
    13. alert.send_keys("张三")
    14. time.sleep(2)
    15. alert.accept()
    16. time.sleep(2)
    17. driver.quit()

     13.DIV块的处理

     如果页面元素比较多,利用元素的属性无法准确的定位这个元素的时候,我们可以先定位元素所在的 div块,再去定位这个元素。

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\modal.html")
    7. driver.get(url)
    8. driver.maximize_window()
    9. time.sleep(2)
    10. driver.find_element(by=By.LINK_TEXT, value="Click").click()
    11. time.sleep(3)
    12. div1 = driver.find_element(by=By.CLASS_NAME, value="modal-body")
    13. time.sleep(2)
    14. div1.find_element(by=By.LINK_TEXT, value="click me").click()
    15. time.sleep(2)
    16. div2 = driver.find_element(by=By.CLASS_NAME, value="modal-footer")
    17. time.sleep(2)
    18. buttons = driver.find_elements(by=By.TAG_NAME, value="button")
    19. buttons[0].click()
    20. time.sleep(2)
    21. driver.quit()

    14.上传文件操作

    先定位上传文件按钮,然后使用send_keys(”文件的绝对路径“)

    1. import os
    2. import time
    3. from selenium import webdriver
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Edge()
    6. url = "file:///"+os.path.abspath("E:\\测试\\html\\selenium_html\\upload.html")
    7. driver.get(url)
    8. driver.maximize_window()
    9. time.sleep(2)
    10. driver.find_element(by=By.TAG_NAME, value="input").send_keys("C:\\Users\\zhang\\Desktop\\test.txt")
    11. time.sleep(2)
    12. driver.quit()

  • 相关阅读:
    搭建grpc服务(二)—Java版
    04-React脚手架
    Mac远程访问Windows服务器
    浏览器面试题
    Ble Mesh的Generic Model ID&Opcode
    git 如何删除本地分支且并没有完全合并到目标分支中
    HTML做一个个人博客页面(纯html代码)
    二进制安装Docker
    HTML+CSS实现登陆页面样式布局、网页设计练习案例
    避坑:使用torchvision.transforms.functional.adjust_gamma进行gamma变换时需注意输入数据的类型
  • 原文地址:https://blog.csdn.net/qq_46235384/article/details/126003361