在 WebDriver 中处理 JavaScript 所生成的 alert、confirm 以及 prompt 是很简单的。具体做法是使用
switch_to_alert()方法定位到 alert/confirm/prompt。然后使用 text/accept/dismiss/send_keys 按需进行操做。
text 返回 alert/confirm/prompt 中的文字信息。
accept 点击确认按钮。
dismiss 点击取消按钮,如果有的话。
send_keys 输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错。
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.implicitly_wait(10)
#鼠标悬停相“设置”链接
link = driver.find_element_by_link_text(u'设置')
ActionChains(driver).move_to_element(link).perform()
#打开搜索设置
driver.find_element_by_class_name('setpref').cick()
#保存设置
driver.find_element_by_css_selector('#gxszButton > a.prefpanelgo').click()
#接收弹窗
driver.switch_to_alert().accept()
driver.quit()
从这个例子中我们重温了 4.4 节中 ActionChains 类所提供的 move_to_element()鼠标悬停的使用,将鼠
标悬停在“搜索”链接上然后弹出下拉菜单。在菜单中点击“搜索设置”按钮。设置完成点击“保存设置”
弹出警告框。通过 switch_to_alert()方法获取当前页上的警告框,accept()接受警告框。
上传文件
文件上传操作也比较常见功能之一,上传功能操作 webdriver 并没有提供对应的方法,关键上传文件
的思路。
对于 web 页面的上功能,点击“上传”按钮需要打开本地的 Window 窗口,从窗口选择本地文件进行
上传,那么 WebDriver 对于 Windows 的控件是无能为力的。所以,对于初学者来说一般思路会卡在如何实
别 Window 控件的问题上。
对于 web 页面的上传功能一般会有以下几种方式。
普通上传 :普通的附件上传都是将本地文件的路径作为一个值放 input 标签中,通过 form 表单提交的
时候将这个值提交给服务器。
插件上传:一般是指基于 Flash 与 JavaScript 或 Ajax 等技术所实现的上传功能或插件。
send_keys 实现上传
对于通过 input 标签实现的通过上传,可以将其看作一个输入框,通过 send_keys()传入本地文件路径
从而模拟上传功能。
upfile.html
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
</head>
<body>
<div class="row-fluid">
<div class="span6 well">
<h3>upload_file</h3>
<input type="file" name="file" />
</div>
</div>
</body>
<script
#coding=utf-8
from selenium import webdriver
import os
driver = webdriver.Firefox()
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')
driver.quit()
通过这种方法上传,就绕开了操作 Windows 控件的步骤。如果能找上传的 input 标签,那么基本都可
以通过 send_keys()方法向其输入一个文件地址来实现上传。