Mój kod nie działa na demo AngularJS Drag and Drop list: http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/simple

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import os

driver = webdriver.Firefox()
driver.get("http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/simple")
time.sleep(2)
source_element = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/div[1]/div[1]/div[1]/div/div[2]/ul/li[1]')
dest_element = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/div[1]/div[1]/div[2]/div/div[2]/ul/li[3]')

actions = ActionChains(driver)
actions.drag_and_drop(source_element, dest_element)
actions.perform()
time.sleep(10)
os.system("taskkill /im firefox.exe /f")

Próbuję wielu rozwiązań, ale to nie działa. Moim zdaniem problem polega na „upuszczeniu” akcji.

-1
WencelF 20 listopad 2019, 16:33
1
Co rozumiesz przez niedziałanie?
 – 
Guy
20 listopad 2019, 16:38
Nie działa, wygląda dziwnie
 – 
WencelF
20 listopad 2019, 16:41
1
nie działa tak naprawdę nic nie znaczy. Masz wyjątek? elementy się nie poruszają? coś innego?
 – 
Guy
20 listopad 2019, 16:44
Element nie przechodzi do prawej listy
 – 
WencelF
20 listopad 2019, 16:45

1 odpowiedź

Elementy na stronie http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/simple to . Wziąłem Twój kod, dokonałem kilku prostych modyfikacji i wykonałem funkcję drag_and_drop za pomocą i i oto spostrzeżenia:

Firefox

  • Blok kodu:

    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.common.action_chains import ActionChains
    
    driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("http://marceljuenemann.github.io/angular-drag-and-drop-lists/demo/#/simple")
    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h1[text()='Demo: Simple Lists']")))
    driver.execute_script("return arguments[0].scrollIntoView(true);", element)
    source_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@dnd-list='list']/li[normalize-space()='Item A1']")))
    dest_element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@dnd-list='list']/li[normalize-space()='Item B2']")))
    ActionChains(driver).drag_and_drop(source_element, dest_element).perform()
    
  • Obserwacja: element z tekstem jako Element A1 jest pomyślnie przeciągany, ale nigdy nie jest upuszczany. Ten problem można również odtworzyć za pomocą Chrome / ChromeDriver.

  • Migawka przeglądarki:

drag_n_drop


Wniosek

Jest to znany problem z Selenium i został szczegółowo omówiony w wątku Przeciągnij i upuść HTML5 za pomocą Selenium Webdriver


Alternatywny

Aby uzyskać działające rozwiązanie, możesz śledzić dyskusję w Jak symulować przeciąganie i upuszczanie HTML5 w Selenium Webdriver?


Outro.

Szczegółową dyskusję znajdziesz na liście problemów chromedriver Przeciąganie i upuszczanie HTML5 nie działa, co jest obecnie blokowane przez problem chromium Przeciągnij i upuść nie działa przez protokół debugowania Chrome

0
DebanjanB 20 listopad 2019, 18:30