python自动化9 处理常见自动化场景方法(批量处理一组对象、层级定位、网页嵌套定位、弹窗识别(js弹窗))

批量处理一组对象

webdriver使用find element方法定位一个特定的对象,不过我们有时需定位一组对象,webdriver同样提供了定位一组元素的方法叫find elements,定位一组对象一般用于以下场景:
1、批量操作对象,比如将页面上的checkbox都勾选上。
2、先获取一组对象,再在这组对象中过滤需要具体定位的一些对象。

有多个选择框时,把选择框全部读出来放入到列表中,再以遍历的方式勾选上。

import sys ,os
sys.path.append(os.getcwd()+'/../test_data')
from test_data.web_driver_utils import WebDriver
import time

urls = 'http://127.0.0.1/zentao/user-login.html'
driver = WebDriver()
driver.get_urls(urls)
eles = driver.find_element_xpath('//input[contains(@name,"checkbox")]')
for e in eles:
    time.sleep(1)
    e.click()

层级定位

在实际的项目测试中,经常会遇到无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。
层级定位的思想是先定位父对象,然后再从父对象中精确定位出其我们需要选取的后代元素。

driver.find_element_by_id('***').find_element_by_link_text('***')

网页嵌套定位

html—A中嵌html—B(iframe实现),由页面A跳转到页面B中,识别页面B中的元素。

在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B。
switch_to_frame方法可以把当前定位的主题切换到frame里,在frame里实际是嵌套了另外一个页面,而webdriver每次只能在一个页面识别,所以需要用switch to frame方法去获取frame中嵌套的页面。

class WebDriver:
    def __init__(self,driver_path=config_u.get_driver_path):
        path = Service(driver_path)
        self.driver = webdriver.Firefox(service=path)
        self.mouse = ActionChains(self.driver)

    def switch_to_frame_xpath(self,xpath_path):
        #页面A跳转到页面B
        self.driver.switch_to.frame(xpath_path)

    def switch_to_frame_default(self):
        # 页面B跳转主页面(默认页面)
        self.driver.switch_to.default_content()

弹窗识别(js弹窗)

有时会出现,弹窗元素无法识别。


class WebDriver:
    def __init__(self,driver_path=config_u.get_driver_path):
        path = Service(driver_path)
        self.driver = webdriver.Firefox(service=path)
        self.mouse = ActionChains(self.driver)

    def get_urls(self,urls):
        try:
            self.driver.get(urls)
            log_utils.print_file_log('info', '窗口打开成功')
        except Exception as e:
            log_utils.print_file_log('error','url错误:'+str(e))

    def switch_to_alter(self):
        #跳转到js弹窗
        s = self.driver.switch_to.alert
        return s
    def alter_get_element(self):
        #js内的相关操作
        s = WebDriver.switch_to_alter()
        s= s.text   #获取文本
        s.dismiss() #点击取消
        s.accept()  #点击确认
        s.send_keys('ssss') #输入

driver.witch_to.alert.send_keys(‘ssss’)单独使用时不会输入;
必须和driver.witch_to.alert.accept()同时使用。(selenium的一个显示bug)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值