【问题标题】:Why ActionChains does not work in PhantomJS Webdriver but works in Chrome Webdriver?为什么 ActionChains 在 PhantomJS Webdriver 中不起作用,但在 Chrome Webdriver 中起作用?
【发布时间】:2015-07-03 00:08:03
【问题描述】:

我想使用 PhantomJS 更改滑块句柄,但它不起作用。请检查以下在 Chrome Webdriver 下有效但在 PhantomJS 中无效的代码。这些代码尝试将手柄向右滑动滑块宽度的 10%。 任何想法让它适用于 PhantomJS?

from browsermobproxy import Server
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains

# settings for choosing Chrome or PhantomJS:
#...
#...
#driver = webdriver.Chrome(...) or webdriver.PhantomJS(...)

url = "http://jqueryui.com/slider/"
driver.get(url)
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe")))

handle_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#slider > span")))
bar_element = driver.find_element_by_css_selector("#slider")
offset = bar_element.size['width'] * 0.1

print "Initial handle location:", handle_element.get_attribute("style")

move = ActionChains(driver)
move.click_and_hold(handle_element).move_by_offset(offset, 0).release().perform()

print "Handle location after sliding:", handle_element.get_attribute("style")

print "Slider bar size:", bar_element.size['width']

驱动为 Chrome 时的输出:

Initial handle location: left: 0%;
Handle location after sliding: left: 10%;
Slider bar size: 548

驱动为 PhantomJS 时的输出:

Initial handle location: left: 0%;
Handle location after sliding: left: 0%;
Slider bar size: 444

【问题讨论】:

  • @ArtjomB。感谢您的评论。我是初学者。那么,您能告诉我什么是“合成事件”吗?
  • 对不起,没有收到你的通知,因为我删除了我的评论并把它变成了一个答案。如果页面上有 jQuery,则可以尝试使用 thisdriver.execute_script() 之类的方法。

标签: python-2.7 selenium-webdriver webdriver phantomjs selenium-chromedriver


【解决方案1】:

PhantomJS 本身不支持拖动。您将不得不尝试合成事件。

但是,对于“mousemove”,没有按下按钮(即没有拖动)

Source

如果页面上有 jQuery,则可以尝试使用 thisdriver.execute_script() 之类的方法。 Here 是 ruby​​ 的一个例子。

【讨论】:

  • @User 这正是我所说的“合成事件”的意思。
  • 当问题被标记为 python 时,您还提供了指向 ruby​​ 的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 2017-01-19
  • 1970-01-01
  • 2022-11-10
  • 2012-10-29
  • 1970-01-01
相关资源
最近更新 更多