【WEB自动化测试】-下拉框、弹出框、滚动条、frame表单、多窗口切换

心已赠人 2023-10-13 14:19 137阅读 0赞

一、下拉框

1.1 下拉框操作

说明:下拉框就是HTML中标签对应的元素,通过元素定位方式获取

例如:se = Select(driver.find_element(By.CSS_SELECTOR, ‘[name=”city”]‘))

操作方法:

  1. select_by_index(index) —>根据option索引来定位,从0开始

  2. select_by_value(value) —>根据option属性,value值来定位

  3. select_by_visible_text(value) —>根据option显示文本来定位

二、弹出框处理(包含系统弹出框和自定义弹出框)

2.1 系统弹框的种类

网页中常用的弹出框有三种

  1. alert 警告框

  2. confirm 确认框

  3. prompt 提示框

2.2 系统弹出框处理方法

说明:Selenium中对处理弹出框的操作,有专用的处理方法。

  1. 获取弹出框对象

alert = driver.switch_to.alert

  1. 调用

alert.text —>返回alert/confirm/prompt中的内容

alert.accept() —>接受对话框选项

alert.dismiss() —>取消对话框选项

  1. 注意:凡是通过JS实现的系统弹窗,无法通过鼠标右键检查选项获取元素信息。
  1. # 切换到弹窗
  2. alert = driver.switch_to.alert
  3. # 同意
  4. alert.accept()

2.3 自定义弹出框 (信息提示框)

自定义弹出窗,如报错提示信息,显示时间短。浏览器定位需要debug模式,才能长时间固定。通过selenium定位,与查找普通元素一样。一般用来获取提示框的内容。

  1. time.sleep(0.5) # 等待时间是为了使内容加载出来。要不然只能定位到元素,但是内容抓取不到
  2. msg = self.driver.find_element(By.CSS_SELECTOR,'p[class="el-message__content"]').text
  3. assert msg == '报错信息'

三、滚动条操作

滚动条:一种可控制页面显示范围的组件

3.1 为什么要学习滚动条操作

  1. 在HTML页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载

  2. 页面注册同意条款,需要滚动条到最底层,才能点击同意

3.2 实现方式

说明:Selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的。

  1. 设置JavaScript脚本控制滚动条

js = “window.scrollTo(0,1000)”

(0:左边距;1000:上边距;单位像素)

  1. selenium调用执行JavaScript脚本的方法

driver.execute_script(js)

  1. driver.get('https://news.baidu.com')
  2. time.sleep(5)
  3. js = "window.scrollTo(0,1000)"
  4. driver.execute_script(js)
  5. time.sleep(5)
  6. # 反向只需要坐标归0
  7. js = "window.scrollTo(0,0)"
  8. driver.execute_script(js)

四、frame表单

4.1 frame 格式

frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素

形式一:【了解】







形式二:

login.html

  1. <body>
  2. <div>
  3. 账户<input type="text" id="user"></input>
  4. </div>
  5. <iframe src="frame_a.html" frameborder="1" height="500" width="48%" name="frame1"></iframe>
  6. <iframe src="frame_b.html" frameborder="1" height="500" width="48%" name="frame2"></iframe>
  7. </body>

frame_a.html

  1. <body style="background-color:#8F8FBD">
  2. <div>
  3. 账户A<input type="text" id="user1"></input>
  4. </div>
  5. </body></html>

frame_b.html

  1. <body style="background-color:red">
  2. <div>
  3. 账户B<input type="text" id="user2"></input>
  4. </div>
  5. </body></html>

4.2 frame切换方法

说明:在Selenium中封装了如何切换frame框架的方法

方法:1)driver.frame(frame_reference) —切换到指定frame的方法

frame_reference:可以为frame框架的name,id或者定位到的frame元素

2)driver.switch_to.default_content() —>恢复默认页面方法

4.3 总结

  • 为什么切换?

当前主页面没有iframe表单页面元素信息,不切换,找不到元素

  • 如何切换

方法:driver.switch_to.frame(“id\name\element”)

  • 为什么要回到主目录

iframe或frame只有在主目录才有相关元素信息,不回到主目录,切换语句会报错

  • 如何回到主目录

方法:driver.switch_to.default_content()

4.4 代码

  1. # 2. 打开url
  2. driver.get(r'file:///F:/project/pythonProject/login.html')
  3. # 通过xpath定位元素
  4. username = driver.find_element(By.ID, "user")
  5. username.send_keys('admin')
  6. driver.switch_to.frame("frame1")
  7. username1 = driver.find_element(By.ID, 'user1')
  8. username1.send_keys('admin1')
  9. # 切换到主页面 driver.switch_to.default_content()
  10. driver.switch_to.default_content()
  11. driver.switch_to.frame("frame2")
  12. username1 = driver.find_element(By.ID, 'user2')
  13. username1.send_keys('user2')

五、多窗口切换

5.1 多窗口

说明:在HTML页面中,当点击超链接或者按钮时,有的会在新的窗口打开页面

  1. <body>
  2. <div>
  3. 账户<input type="text" id="user"></input>
  4. </div>
  5. <div>
  6. <!--target="_blank"指定在哪新窗口中打开页面 -->
  7. <a href="https://www.baidu.com" target="_blank">百度</a>
  8. </div>
  9. <iframe src="frame_a.html" frameborder="1" height="500" width="48%" name="frame1"></iframe>
  10. <iframe src="frame_b.html" frameborder="1" height="500" width="48%" name="frame2"></iframe>
  11. </body>

5.2 实现多窗口切换的方法

说明:在Selenium中封装了获取当前窗口句柄,获取所有窗口句柄和切换到指定句柄窗口的方法

句柄:英文handle,窗口的唯一识别码

方法:

1)driver.current_window_handle —>获取当前窗口句柄

2) driver.window_handles —>获取所有窗口句柄

3)driver.switch_to.window(handle) —>切换指定窗口句柄

5.3 代码

  1. driver.get(r'file:///F:/project/pythonProject/login.html')
  2. cur_handle = driver.current_window_handle
  3. driver.find_element(By.PARTIAL_LINK_TEXT, '百度').click()
  4. handles = driver.window_handles
  5. print(handles)
  6. for h in handles:
  7. if h != cur_handle:
  8. # 切换
  9. driver.switch_to.window(h)
  10. driver.find_element(By.ID, 'kw').send_keys('黑马')

5.4 总结

1. 为什么要切换多窗口?

页面存在多个窗口时,selenium默认焦点只会在主窗口上的所有元素,不切换窗口,无法操作除主窗口之外的窗口元素。

发表评论

表情:
评论列表 (有 0 条评论,137人围观)

还没有评论,来说两句吧...

相关阅读