8. 附录:常见问题

Another FAQ: https://github.com/SeleniumHQ/selenium/wiki/Frequently-Asked-Questions

8.1. 如何使用 ChromeDriver ?

下载最新版本的 chromedriver. 解压缩这个文件:

  1. unzip chromedriver_linux32_x.x.x.x.zip

你应该会看到一个 chromedriver 的可执行文件. 现在你可以像这样创建一个Chrome WebDriver 实例:

  1. driver = webdriver.Chrome(executable_path="/path/to/chromedriver")

这个示例的其余部分应该在其他的文档中给出。

8.2. Selenium 2是否支持XPath 2.0版本?

参考:http://seleniumhq.org/docs/03_webdriver.html#how-xpath-works-in-webdriver

Selenium代表的XPath查询基于浏览器自身的XPath引擎,所以Selenium支持任何支持XPath的浏览器。在不具备原生的XPath引擎(IE6,7,8)的浏览器,Selenium只支持XPath 1.0。

8.3. 如何向下滚动到页面的底部?

参考: http://blog.varunin.com/2011/08/scrolling-on-pages-using-selenium.html

你可以在加载完成的页面上使用 execute_script 方法执行js。所以,你调用javascript API滚动到底部或页面的任何位置。

这里是一个滚动到页面底部的例子:

  1. driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

window 对象在DOM有一个scrollTo 滚动到打开窗口的任意位置的方法。 该 scrollHeight是所有元素的共同属性。 该 document.body.scrollHeight 将给出整个页面体的高度。

8.4. 如何使用自定义的Firefox 配置文件保存文件?

参考: http://stackoverflow.com/questions/1176348/access-to-file-download-dialog-in-firefox

参考: http://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/

第一步是要确认自动保存文件的类型。

要确定你想要自动下载的内容类型,你可使用 curl:

  1. curl -I URL | grep "Content-Type"

找到内容类型的另一种方法是使用 `requests <http://python-requests.org>`模块,你可以像这样使用:

  1. import requests
  2. content_type = requests.head('http://www.python.org').headers['content-type']
  3. print(content_type)

一旦内容类型被确认,你可以用它来设置firefox配置文件的偏好: browser.helperApps.neverAsk.saveToDisk下面是一个例子:

  1. import os
  2.  
  3. from selenium import webdriver
  4.  
  5. fp = webdriver.FirefoxProfile()
  6.  
  7. fp.set_preference("browser.download.folderList",2)
  8. fp.set_preference("browser.download.manager.showWhenStarting",False)
  9. fp.set_preference("browser.download.dir", os.getcwd())
  10. fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
  11.  
  12. browser = webdriver.Firefox(firefox_profile=fp)
  13. browser.get("http://pypi.python.org/pypi/selenium")
  14. browser.find_element_by_partial_link_text("selenium-2").click()

在上面的例子中,application/octet-stream 被当作内容类型。

browser.download.dir 选项指定了你要下载文件的目录。

8.5. 如果上传文件到文件上传控件?

选择 <input type="file"> 元素并且调用 send_keys() 方法传入要上传文件的路径,可以是对于测试脚本的相对路径,也可以是绝对路径。请牢记在Windows和Unix系统之间的路径名的区别。

8.6. 如果在Firefox中使用firebug工具?

首先下载Firebug插件的XPI文件, 然后调用对于firefox 的配置提供的 add_extension 方法

from selenium import webdriverfp = webdriver.FirefoxProfile()fp.add_extension(extension=’firebug-1.8.4.xpi’)fp.set_preference(“extensions.firebug.currentVersion”, “1.8.4”) #Avoid startup screenbrowser = webdriver.Firefox(firefox_profile=fp)

8.7. 如果获取当前窗口的截图?

使用webdriver提供的 save_screenshot 方法:

  1. from selenium import webdriver
  2.  
  3. driver = webdriver.Firefox()
  4. driver.get('http://www.python.org/')
  5. driver.save_screenshot('screenshot.png')
  6. driver.quit()