webUI自动化测试弹窗报错

项目场景:

webUI自动化测试,selenium,webdriver

问题描述

提示:这里描述项目中遇到的问题:
web自动化测试使用webdriver打开的浏览器,没有已经安装插件,导致弹窗提示,致使系统报错退出用例的执行,类似于下图这种在这里插入图片描述报错代码

def open_url(self, **kwargs):
    try:
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get(url)
    except Exception as e:
        return False, e
    return True, self.driver

原因分析:

问题原因很简单,当初始化一个浏览器实例的时候,并没有读取到用户的目录(我觉得也可以叫配置),因为打开的是一个新的浏览器


解决方案:

我的想法是先手动开打浏览器,然后让程序在已经打开浏览器的基础上,新增一个标签栏,就是在原有已经打开的浏览器上执行自动化测试,但是有一点比较麻烦的是需要使用命令行启动浏览器,找到浏览器的安装路径,cmd执行

chrome.exe --remote-debugging-port=9222

下面是python

        try:
            chrome_options = Options()
            chrome_options.add_experimental_option("debuggerAddress", "localhost:9222")  # 设置远程调试端口为9222
            
            self.driver = webdriver.Chrome(options=chrome_options)
            self.driver.maximize_window()
            self.driver.get(url)
        except Exception as e:
            return False, e
### Web自动化测试中处理弹窗的方法 在Web自动化测试领域,处理由JavaScript生成的弹窗(如`alert`、`confirm`和`prompt`),以及基于HTML元素构建的自定义弹窗是非常重要的任务之一[^1]。 #### 使用Selenium处理标准JavaScript弹窗 对于标准的JavaScript弹窗Selenium WebDriver提供了一套简洁而有效的接口来进行交互: - **接受警报对话框**:当遇到简单的提示或确认对话框时,可以调用`accept()`方法来模拟点击“确定”按钮的行为。 ```python from selenium import webdriver driver = webdriver.Chrome() alert = driver.switch_to.alert alert.accept() # 点击 "OK" ``` - **拒绝/关闭警告框**:如果需要模拟用户取消操作,则应使用`dismiss()`函数代替。 ```python alert.dismiss() # 点击 "Cancel" 或者关闭窗口 ``` - **读取并验证消息内容**:有时还需要获取显示给用户的文本信息以便于断言或其他逻辑判断,在这种情况下可利用`text`属性访问当前活动的警告框内的文字描述。 ```python message = alert.text print(f"The alert says: {message}") ``` - **向Prompt输入数据**:针对带有文本域的提示框(`prompt`),可以通过`send_keys()`发送字符串至该字段内完成填写动作后再做进一步响应。 ```python alert.send_keys("Emily") # 向 prompt 输入指定的内容 alert.accept() # 提交所填入的信息 ``` 以上功能均适用于浏览器内置的标准JS弹窗,并且能够很好地满足大多数场景下的需求[^3]。 #### 应对复杂类型的模态对话框 除了上述提到的基础类型外,现代网站还经常采用更加复杂的UI组件作为通知机制的一部分。这类高级别的弹出层往往不是纯粹依靠原生DOM事件创建出来的简单对象;相反它们可能是借助第三方库或者框架精心设计而成的高度定制化的界面控件。为了应对这种情况,开发者通常会采取如下策略: - 首先确保触发条件已经达成从而使得目标弹窗得以显现出来; - 接着运用常规的选择器语法(ID, Class Name, XPath等)精确定位到构成此浮层结构的关键节点上; - 最终执行必要的鼠标指针移动、按键按下释放等一系列仿真指令以达到预期效果。 ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver.get('https://example.com') wait = WebDriverWait(driver, 10) # 假设这里有一个按钮用于打开模态框 open_modal_button = wait.until(EC.element_to_be_clickable((By.ID, 'openModal'))) open_modal_button.click() # 定位模态框内部的具体元素进行互动 modal_element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'modal-content'))) input_field_in_modal = modal_element.find_element(By.TAG_NAME, 'input') input_field_in_modal.send_keys('Test Input') submit_btn_inside_modal = modal_element.find_element(By.CSS_SELECTOR, '.btn-primary') submit_btn_inside_modal.click() ``` 这段代码展示了如何等待特定元素变得可用之后再对其进行操作的过程,这对于那些加载时间不确定性的动态网页来说尤为重要。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值