在有些测试场景中,我们需要上传文件以帮助完成测试,或解决Selenium自带的方法无法定位到弹出的文件框以及网页弹出的提醒框问题。这些都需要我们用特殊的方式来处理。
图3-23所示的是企业微信上传文件的操作,此操作使用自动化方式上传文件,实现的步骤是:首先定位到 “上传图片” 按钮元素,该元素为input标签,type为file,然后将文件路径作为值传入到send_keys()方法的参数中。
上传文件演示代码如下(Python版和Java版)。
Python演示代码
driver.find_element(By.CSS_SELECTOR,"#js_upload_input")\
.send_keys("./hogwarts.png")
Java演示代码
driver.findElement(By.cssSelector("#js_upload_input"))\
.sendKeys(".hogwarts.png");
在页面测试操作中,测试人员有时在被测对象中会遇到JavaScript所生成的Alert、Confirm及Prompt弹窗,我们可以使用JavaScript的Switch_to.aleret()方法定位到这些弹窗。然后使用text、accept、dismiss、send_keys等方法对弹窗进行操作。
1)switch_to.alert():获取当前页面上的警告框。
2)text: 返回Alert、Confirm、Prompt弹窗中的文字信息。
3)accept():接收现有的警告框,即点击 "确定" 按钮操作。
4)dismiss(): 解散现有警告框,即点击 “取消” 按钮操作。
5)send_keys(keysToSend): 发送文本至警告框。
(1)Alert弹窗
在窗口中输入一段文字后,点击 “提交” 按钮,会弹出确认内容的弹窗。对于这种场景可以使用下面的方式处理,演示代码如下(python版和Java版)。
Python演示代码
""" Aleart 弹窗获取文本与确认操作 """
driver.get("http://sahitest.com/demo/alertTest.htm")
driver.find_element_by_name("bl").click()
#添加显示等待,等待弹框出现
WebDriverWait(driver,5,0.5).until(EC.alert_is_present())
#切换到弹框
alert = driver.Switch_to.alert
#打印弹框的文本
print(alert.text)
#点击“确定”按钮
alert.accept()
# 点击“取消”按钮或者关闭弹框
# alert.dismiss()
Java演示代码
@Test
public void alerTest{
//Alert弹窗获取文本与确认操作
driver.get("http://sahitest.com/demo/alertTest.htm");
driver.findfindElement(By.name("bl")).click();
//添加显示等待,等待弹窗出现
WebDriverWait wait = new WebDriverWait(driver,5);
Wait.until(ExpectedConditions.alertIsPresent());
//切换到弹窗
Alert alert = driver.switchTo().alert();
System.out.printIn(alert.getText());
//点击“确定”按钮
alert.accept();
//点击“取消”按钮或者关闭弹窗
//alert.dismiss();
}
(2)Confirm弹窗
定位Confirm弹窗的演示代码如下(Python版和Java版)。
Python演示代码
""" 对 prompt 弹窗进行的获取文本、输入内容、确认操作 """
driver.get("http://sahitest.com/demo/promptTest.htm")
driver.find_element_by_name("bl").click()
#添加显示等待,等待弹窗出现
WebDriverWait(driver,5).until(EC.alert_is_present())
#切换到弹窗
alert = driver.switch_to.alert
#向弹窗内输入一段文字
alert.send_keys('Selenium Alert弹出窗口输入信息')
#点击"确定"按钮
alert.accept()
Java演示代码
@Test
public void alertlTest(){
// 对 Prompt 弹窗进行的获取文本、输入内容、确认操作
driver.get("http://sahitest.com/demo/promptTest.htm");
driver.findElement(By.name("bl")).click();
//添加显示等待,等待弹窗出现
WebDriverWait wait = new WebDriverWait(driver,10);
Wait.until(ExpectedConditions.alertIsPresent());
//切换到弹窗
Alert alert = driver.switchTo().alert();
//向弹窗输入一段文字
alert.sendKeys("Selenium Alert弹出窗口输入信息");
//点击“确定”按钮
alert.accept();
}
(3)Prompt弹窗
定位Prompt弹窗的演示代码如下(Python版和Java版)。
Python演示代码
"""对Confirm弹窗进行的获取文本、确认、取消操作"""
driver.get("http://sahitest.com/demo/confirmTest.htm")
driver.find_element_by_name("bl").click()
#等待弹出窗口出现
WebDriverWait(driver,5).until(EC.alert_is_present())
#切换到弹窗
alert = driver.switch_to.alert
#点击“确定”按钮
alert.accept
#点击“取消”按钮
alert.dismiss()
Java演示代码
@Test
public void confirmTest(){
// Confirm对弹窗进行的获取文本、确认、取消操作
driver.get("http://sahitest.com/demo/confirmTest.htm");
driver.findElement(By.name("bl")).click();
//添加显式等待,等待弹窗的出现
WebDriverWait wait = new WebDriverWait(driver,5);
wait.until(ExpectedConditions.alertIsPresent());
//切换到弹窗
Alert alert = driver.switchTo().alert();
//点击"确定"按钮
alert.accept();
//点击“取消”按钮
alert.dismiss();
}