做UI自动化时想到的几点

UI Automation从项目准备到框架成熟,差不多用去了6个月的时间。这段时间给我了很大的发挥空间和难得的实现自己想法的机会。

 

昨天发现了当时写的笔记,觉得可以记录出来,以后会有用。

 

1. 对需求进行测试。举个例子: 项目起初只考虑在一台机器上运行测试用例,当几乎所有的单机测试用例都完成的时候,发现需要把多机器联合操作(run on multipy machines for inter-operation)的测试用例加进来。可是程序设计的时候都是从单机运行用例的角度考虑的,没有留出可以运行多机情况的想法空间。如果当初就考虑好了多机运行是怎么走的,那么起初在设计单机运行的时候做出弹性的框架来兼容多机模式。为什么需要对需求进行测试?我觉得是因为我们经常在项目中期和后期发现需求中包括逻辑不一致的问题,更能发现我们普通人容易犯的一个错误是:用另外一个或多个缺陷/错误来掩盖或是互相掩盖现有缺陷,换句话说叫一错再错,错到我们不认为错为止。

2. 在团队开发里,在项目伊始,对所有队员描述一个大家共同努力的目标。这样做的好处是在开始的时候就做对的事情,让每个人都清楚和统一目标,否则有的人会因为觉得自己的角色可能不重要,所以不用太用心,给全组士气造成影响。另外一个好处是避免以后再废话。

3.讲述所有人(不同角色的人)所应具备的素质。人就是这样,如果开始的时候就做对的事情,有了警鸣钟,事情进展的会顺利些。虽然这些事情看似多此一举,但不得不考虑人的本性就是如此。

4.经常的去思考如何把技术和产品做到最大限度的优秀。这样会产生一些灵感或想法,来改进现有的东西。

5.使用统一的接口。

6.对领导,要想得到项目的具体实施,需要去争取他们的肯定和共识。

7.要验证的场景很多,找出、设计出不同的场景。比如:COM验证邮件是否发出,邮件文本验证, 不同控件的特有的点击事件,用同一套代码对不同版本产品的验证等等。

8.UI自动化的技术。UI Automation 离不开像Mita, KAF ,Maui这样的对UIA技术框架又封装了一层的框架,准确的应该叫类库。

他们都有各自的特点:

1):Maui是最贴近UIA core的一层了,KAF,MITA 都是在maui的基础上建立起来的,这么说可能不准确,但他们都应用了maui的东西。 2):MITA:要比maui好用,它的架构本身就是应用装饰模式,并且对windows application 支持的还算不错,包括WPF,所以使用MITA做UI自动化简单,宜用,比起UIA框架提供的元素好用多了。

3).KAF:它的内部都引用了Maui和MITA, 可能是考虑到Maui虽低层,但不支持WPF;MITA虽支持wpf,但对外部不公开com. 我觉得KAF就是为浏览器的UI自动化而生。它对浏览器的支持超过前两者。

目前UI自动化的技术还存在很大的缺陷,有三点:

一是在UI element查找时,不支持正则表达式;

二是产品的UI技术总是不断变化,从win32,到wpf,再到Rebun, 这就造成了对同一个界面元素的唯一标识的不一致性。对自动化开发限制和挑战很大,针对于特定系统,特定版本的软件,要有兼容的解决方案才能克服。问题的根源是在产品设计时,开发者就没考虑UI automation自动化这事,windows OS也很难让所有在windows上运行的程序都有唯一而且统一的标识。

三是不支持二级查找。目前都是从UI tree的根节点开始查找,而不能直接从所有的二级或三级节点查找ui element.

9.要想提高开发速度,可以通过良好的成熟的架构设计,工具和管理。

10.使用好日志。记录信息时,需要记录好log lelver, when, where, How. 对troubleshooting很有帮助

 

 

 

 

 

<think>好的,我现在需要帮助用户解决如何使用Python编写网页自动连续录入的小程序的问题。首先,我得理解用户的需求。用户提到的是“网页自动连续录入”,这可能指的是自动化填写网页表单,比如自动填写多个数据记录到网页的表格或者表单,比如自动化的数据录入、测试或者批量处理任务。 接下来,我需要考虑用户可能的背景。用户可能有一定的Python基础,但可能对自动化操作网页不太熟悉。因此,我需要给出一个清晰的步骤说明,并提供示例代码,同确保解释足够详细,让用户能够理解每一步的作用。 首先,我应该想到常用的Python库,比如Selenium,因为它广泛用于网页自动化。根据引用[3],提到Selenium 2.0,也就是WebDriver,所以可能需要推荐使用Selenium库。同,用户可能需要处理表单数据,可能涉及到读取数据源,比如Excel或CSV文件,这候可能需要用到pandas或者csv模块。另外,用户可能需要处理网页元素定位,比如通过ID、XPath等定位输入框和按钮。 然后,我需要考虑整个流程的步骤。大致可以分为几个步骤:安装必要的库、配置浏览器驱动、编写自动化脚本、处理数据输入、处理可能的等待和弹窗等。此外,还需要注意异常处理和可能的优化点,比如显式等待、无头模式等。 接下来,我需要检查用户提供的引用内容,看看是否有相关的信息可以利用。引用[2]提到用Python自动填充销售数据到在线发票生成器,这可能涉及到类似的表单自动填写过程。引用[3]提到Selenium的使用,所以这部分可以作为主要的工具推荐。引用[5]提到快递信息录入的场景,这也和表单填写有关,可能需要处理不同的字段和计算,但用户的问题更偏向于网页自动录入,所以可能更侧重于Selenium的操作。 然后,我需要组织回答结构,确保符合用户的要求:结构清晰,分步解决问题,确保真实可靠。可能需要分为环境准备、代码示例、关键步骤解释、相关优化和注意事项,以及相关问题部分。 在编写示例代码,需要确保代码正确,并且有注释说明。例如,使用Selenium打开网页,定位元素,输入数据,提交表单,处理多个数据条目等。同,需要提醒用户安装必要的库,比如selenium和pandas,并下载对应的浏览器驱动,比如ChromeDriver。 另外,还需要考虑可能的问题,比如网页加载间不同步,需要使用显式等待,或者处理动态生成的元素。可能需要提到WebDriverWait和expected_conditions。此外,无头模式可以在后台运行,提高效率,但可能影响调试。 最后,根据用户的要求,生成相关问题。这些问题应该与网页自动化相关,可能包括数据处理、异常处理、无头模式、验证码处理等。 现在需要检查是否有遗漏的步骤或错误。例如,是否正确处理多个数据记录?是否需要循环读取数据并逐一提交?代码示例是否完整,是否需要使用到pandas来读取Excel文件?是否需要关闭驱动?是否需要异常处理来应对元素未找到的情况? 可能还需要提到其他工具或库,比如PyAutoGUI,但根据引用[1],PySimpleGUI可能更适合桌面应用的自动化,而网页自动化主要还是Selenium。但用户的问题是关于网页的,所以Selenium更合适。 总结下来,回答的结构应该是: 1. 环境准备:安装库和驱动 2. 示例代码:使用Selenium自动填写表单 3. 关键步骤解释 4. 优化建议 5. 相关问题 确保引用相关的引用文献,比如引用[3]关于Selenium,引用[2]关于自动录入表单数据,引用[5]关于应用场景。</think>### 分步解答:Python实现网页自动连续录入 #### 1. 环境准备 - **安装依赖库** ```bash pip install selenium pandas ``` - **下载浏览器驱动** 根据使用的浏览器(如Chrome)下载对应版本的驱动(如[ChromeDriver](https://sites.google.com/chromium.org/driver/)),并将驱动文件路径添加到系统环境变量。 #### 2. 示例代码(以填写多组快递信息为例) ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd # 读取数据源(示例数据格式:CSV文件,包含姓名、地址、重量等字段) data = pd.read_csv("express_data.csv") # 初始化浏览器驱动(以Chrome为例) driver = webdriver.Chrome() driver.get("https://example-express-form.com") # 替换为目标网址 # 遍历数据并自动填写 for index, row in data.iterrows(): try: # 显式等待表单加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "name_input")) ) # 填写表单字段 driver.find_element(By.ID, "name_input").send_keys(row["姓名"]) driver.find_element(By.XPATH, '//input[@placeholder="地址"]').send_keys(row["地址"]) driver.find_element(By.CSS_SELECTOR, "#weight_input").send_keys(str(row["重量"])) # 提交表单 driver.find_element(By.CLASS_NAME, "submit-btn").click() # 处理提交后的跳转或弹窗(示例:等待返回原页面) WebDriverWait(driver, 5).until(EC.url_contains("success")) driver.back() # 返回表单页继续下一轮填写 except Exception as e: print(f"第{index+1}条数据录入失败:{e}") continue driver.quit() ``` #### 3. 关键步骤解释 - **定位元素** 使用`By.ID`、`By.XPATH`等方式定位输入框和按钮,确保网页元素与代码匹配[^3]。 - **显式等待** 通过`WebDriverWait`确保网页元素加载完成,避免因网络延迟导致的错误。 - **数据循环处理** 从CSV/Excel读取数据,逐条填充到网页表单,适用于批量录入场景[^5]。 - **异常处理** 捕获超或元素未找到的异常,保证程序健壮性。 #### 4. 优化建议 - **无头模式运行** 添加`options.add_argument("--headless")`可在后台静默执行,提升效率。 - **验证码处理** 若目标网站有验证码,需结合第三方识别服务(如付费API)或手动介入。 - **日志记录** 添加日志模块记录成功/失败的数据条目,便于后续排查。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值