我是Selenium的Python新手,我对ActionChains有一个无法理解的问题。我想单击一个元素,然后使用ActionChain将其移动到另一个元素,我尝试了两种方法来做到这一点。
首先是2个py文件的组合,它们不起作用
import time
from selenium.webdriver.common.action_chains import ActionChains
def action_function(driver,start,des):
time.sleep(2)
ActionChains(driver).click_and_hold(start).move_to_element(des).release().perform()
time.sleep(3)
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from hilffunktionen import hilffunktion
class PythonOrgSearch(unittest.TestCase):
driver = webdriver.Firefox('./geckodriver')
@classmethod
def firsttest(self):
self.driver.get('file:///C:/My-Project/Probe/index.html')
time.sleep(5) # Let the user actually see something!
dragitem = self.driver.find_element_by_id('mydivheader')
print(dragitem.get_attribute('innerHTML'))
time.sleep(5)
destination = self.driver.find_element_by_id('destination')
time.sleep(4)
hilffunktion.action_function(self.driver,dragitem,destination)
time.sleep(3)
但是,如果我尝试直接在课堂上写它,它会起作用
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
class PythonOrgSearch(unittest.TestCase):
driver = webdriver.Firefox('./geckodriver')
driver.get('file:///C:/My-Project/Probe/index.html')
time.sleep(5) # Let the user actually see something!
dragitem = driver.find_element_by_id('mydivheader')
print(dragitem.get_attribute('innerHTML'))
time.sleep(5)
destination = driver.find_element_by_id('destination')
time.sleep(4)
ActionChains(driver).click_and_hold(dragitem).move_to_element(destination).release().perform()
time.sleep(3)
有人可以解释一下为什么吗? ,如果我只想用第一种方式编写它,我应该怎么做,这样它才能起作用? 。非常感谢您的帮助
答案 0 :(得分:0)
第二种方法“起作用”是因为
A class definition is an executable statement.
(请参见class-definitions中的更多信息)
基本上,python在类定义中运行语句。
如果您想采用第一种方法(假设您要使用unittest),则可以将firsttest方法定义为test_xyz(self):...最后,您可以调用unittest.main(), basic example中类似。