相信大家都遇到过这样的情况:进到一个页面,点击windows组件上传文件=》popup弹出=》选择文件=》回到原popup页面=》点击上传=》progress bar开始启动,需要等待progress bar消失=》上传成功
其中有很多点都是比较让人头疼的,比如文件上传的控制,判断元素的出现时间,progress bar的check处理等待,在此我仅总结一下几个关键点的方法,希望对初学者有所帮助:
1. 先说文件上传popup部分:
很多popup弹出来需要定位时,切换到该frame之后再进行操作,老生常谈,但是还是很多人在很多情况下忽略了,没办法,做测试就是要注意细节:
driver.switchTo().frame("IFrameNewImportFile");
//等待上传文件选择的元素相应的组件显示出来,
waitElementToPresent(driver,"//*[@id='ImportationCatalogueNewImportFileControl1_tmmFileXml']");
/*
在这里需要声明一下,相信不少人认为用implictwait隐形等待,但是就我实际经验来看,在处理popup时候,还是有一个waitElementToPresent方法来确保比较保险,毕竟上传文件本来就容易出问题。。。
*/
//上传特定位置的文件,方法还是很多教程的一样,用的还是sendKeys的方法,不过关键在元素定位
driver.findElement(By.xpath("//*[@id='ImportationCatalogueNewImportFileControl1_tmmFileXml']")).sendKeys("E:\\JAVA testing\\_Testfiles\\ABC.xml");
sleep(2000);
driver.findElement(By.xpath("//*[span='Import']")).click();
2. 接下来就是处理progress bar的过程了:
for(int second=3000;;second++)
{
if (second >= 4000)
System.out.println("timeout : " + second);
else
{
driver.switchTo().defaultContent();
driver.switchTo().frame("IFrameImportationProgress");
sleep(second);
if (driver.findElement(By.xpath("//*[@class='progressBarArea']/span")).isDisplayed())
{
System.out.println(second+":"+"Under importing now");
continue;
}
else
{
driver.switchTo().defaultContent();
break;
}
}
}
和大家想的一样,我第一反应肯定还是用for循环处理,只不过中间要加上不同的嵌套if
判断语句来处理各种情形:1.Timeout 2. 如果progressbar还显示的话,需要跳出循环继续判断 3.如果progress bar不显示了,那么跳出循环,switch到默认content,以便接下来的操作。
关于上传文件的方法还有很多,以后有机会再谈。
分享到:
相关推荐
本文将详细介绍如何使用Selenium处理这两种类型的文件上传。 1. **Input类型上传** 当文件上传控件是一个`<input type="file">`元素时,处理起来相对简单。Selenium提供了一个方便的`send_keys()`方法,可以直接将...
Selenium 处理文件上传的方式主要取决于上传控件的类型。通常有两种情况: 1. **基于`<input type="file">`的文件上传** 这是最常见的情况,HTML中的`<input type="file">`元素用于选择本地文件。在Python ...
Selenium是一款强大的Web自动化测试工具,它能够模拟用户行为,例如点击、输入等,但对文件上传的处理相对较弱。而AutoIt则是一个专门用来自动化桌面应用程序操作的脚本语言,它可以帮助我们处理Selenium无法直接...
- **上传文件(Upload File)**:通常通过模拟文件选择对话框实现。 - **拖拉(Drag and Drop)**:使用`Actions`类来模拟拖拽动作。 - **鼠标悬停(Mouse Move On)**:同样使用`Actions`类实现。 ##### 2.4 常见特殊...
Selenium WebDriver API 包括了许多有用的特性,例如异常处理、操作链、警告处理等。 **7.1 异常** Selenium 提供了一些常见的异常类型,用于处理可能发生的错误: ```python try: element = driver.find_...
- **弹出框与对话框**:包括基本的身份认证对话框、自签名证书处理以及文件上传/下载等操作。 2. **API的简化**:Selenium2.0采用了更为简洁的API设计,主要通过`WebDriver`和`WebElement`两个核心对象来实现自动...
- **3.2.9 上传文件 (Upload File)** - **3.2.10 Windows 和 Frames之间的切换** - **3.2.11 拖拉(Drag andDrop)** - **3.2.12 导航 (Navigationand History)** 示例代码如下: ```java // 向输入框输入文本 ...
- **上传文件(UploadFile)**: 上传文件: ```java WebElement fileElement = driver.findElement(By.id("fileInput")); fileElement.sendKeys("C:\\path\\to\\file.txt"); ``` - **Windows和Frames之间的切换**:...
Selenium 提供了一系列异常类型来处理常见的错误情况,如 `NoSuchElementException`、`ElementNotVisibleException` 等: ```python try: element = driver.find_element_by_id("nonexistent") except ...
总结,本文介绍了使用Python+Selenium+AutoIt组合来处理复杂的文件上传场景。这种方式允许自动化测试更准确地模拟用户行为,特别是在面对非标准文件上传控件时。尽管还有其他方法,如使用`pywin32`库,但每种方法都...
在这种情况下,Selenium 无法处理文件上传。解决办法是使用 PyAutoGUI 库,该库可以模拟鼠标和键盘操作来处理文件上传。 PyAutoGUI 是一个 Python 库,可以让 Python 脚本控制鼠标和键盘与其他应用程序交互。它支持...
在某些情况下,尤其是处理文件上传这种复杂交互时,Selenium 可能需要借助第三方库,如 AutoIt。AutoIt 是一个专门用于Windows平台的自动化脚本语言,它能够模拟用户对桌面应用程序的操作,例如点击、输入等。 在...
总结来说,Selenium在Python中提供了强大的功能,允许我们模拟用户操作,如文件上传和下载。通过精确地控制浏览器行为,可以实现自动化测试和网页数据抓取等多种任务。了解和掌握这些技巧对于提升工作效率和测试质量...
处理文件上传通常需要使用`send_keys`方法模拟键盘输入: ```python input_field = driver.find_element_by_id('uploadInput') input_field.send_keys('/path/to/your/file') ``` **处理弹窗**: 对于弹出窗口,如...
- **ChooseFile** (P15): 选择文件上传。 - **ClickButton/ClickElement/ClickElementAtCoordinates/ClickImage/ClickLink** (P16-17): 执行各种点击操作。 - **CloseAllBrowsers/CloseBrowsers/CloseWindow** (P17-...