Selenium Webdriver - 拖放


Selenium 可以在 ActionsChains 类的帮助下执行鼠标移动、按键、悬停在元素上、拖放操作等。Drag_and_drop 方法首先在源元素上按下鼠标左键,导航到目标元素,最后释放鼠标。

拖放的语法如下:

drag_and_drop(s, t)

这里,s 是按下鼠标左键的源元素,t 是目标元素。我们必须添加语句 from selenium.webdriver import ActionChains 才能使用 ActionChains 类。

让我们对以下元素执行拖放功能 -

拖放功能

在上图中,必须将名称为“Drag me to my target”的元素拖放到元素“Dropped!”中。

代码实现

拖放的代码实现如下 -

from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')
#implicit wait time
driver.implicitly_wait(5)
driver.maximize_window()
#url launch
driver.get("https://jqueryui.com/droppable/")
#switch to frame
driver.switch_to.frame(0)
#identify source element
src = driver.find_element_by_css_selector("#draggable")
#identify target element
trgt = driver.find_element_by_css_selector("#droppable")
#instance of ActionChains
a= ActionChains(driver)
#drag and drop then perform
a.drag_and_drop(src, trgt)
a.perform()

输出

小部件

执行后,名称为 - Drag me to my target 的元素已被拖放到元素 - Dropped! 中。

html 代码中的框架由frames/iframe 标签表示。Selenium 可以通过将 webdriver 访问从主页切换到框架来处理框架。

Selenium Webdriver 框架

方法

下面列出了处理帧的方法 -

  • driver.switch_to_frame("framename") - framename 是框架的名称。

  • driver.switch_to_frame("framename.0.frame1") - 用于通过用点分隔路径来访问帧中的子帧。这里,它将指向名为frame1的框架,它是名为framename的框架的第一个子框架。

  • driver.switch_to_default_content() - 用于将 Webdriver 访问从框架切换到主页。

让我们看看框架内元素的 html 代码。

框架底部

上图中突出显示的标记名是frame,name属性的值为frame_bottom。

代码实现

处理帧的代码实现如下 -

from selenium import webdriver
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')
#implicit wait time
driver.implicitly_wait(5)
#url launch
driver.get("https://the-internet.herokuapp.com/nested_frames")
#switch to frame
driver.switch_to.frame('frame-bottom')
#identify source element
s = driver.find_element_by_tag_name("body")
#obtain text
t = s.text
print('Text is: ' + t)
#quit browser
driver.quit()

输出

框架底部输出

输出显示消息 - Process with exit code 0 表示上述 Python 代码执行成功。此外,框架内的文本(从文本方法获得)- BOTTOM 会打印在控制台中。