在 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()方法向其输入一个文件地址来实现上传。