Home > Blockchain >  Atata Framework: DragAndDrop doesn't work
Atata Framework: DragAndDrop doesn't work

Time:02-19

I am trying to implement simple drag an drop operation on this site with Selenium examples: enter image description here

And seems, my implementation of drag and drop with Atata doesn't work. I got no error, but nothing actually happens.

My implementation:

Page Object:

{
    using _ = DemoQAInteractionsPage;

    [Url("interaction")]
    [WaitForDocumentReadyState]
    public class DemoQAInteractionsPage : Page<_>
    {
        [FindById("item-3")]
        [ScrollsUsingScript]
        public Control<_> DroppableMenu { get; private set; }

        [FindById]
        [DragsAndDropsUsingActions]
        [WaitUntilEnabled]
        public Control<_> Draggable { get; private set; }

        [FindById]
        [DragsAndDropsUsingActions]
        [WaitUntilEnabled]
        public Control<_> Droppable { get; private set; }

        [FindByContent("Dropped!")]
        [WaitUntilEnabled]
        public Control<_> DroppedMessage { get; private set; }
    }
}

Test:

        [Test]
        public void DemoQADragAndDropTest()
        {
            Go.To<DemoQAMainPage>()
                .GoToInteractions();

            Go.To<DemoQAInteractionsPage>(navigate: false)
                .DroppableMenu.ScrollTo()
                .DroppableMenu.Click()
                .Draggable.DragAndDropTo(x => x.Droppable);
        }

I know about plain Selenium implementation, but would prefer Atata API for this. Could you, please, suggest something?

Update: For some reason, this approach is working:

        public _ PerformDragAndDrop()
        {
            IWebElement target = Droppable.GetScope();
            IWebElement source = Draggable.GetScope();
            Actions actions = new Actions(Driver);
            actions.ClickAndHold(source);
            actions.MoveToElement(target);
            actions.Perform();
            actions.Release(target);
            actions.Perform();
            return this;
        }

I've read about this issue, maybe, it's related to chromedriver. Anyway, this could be used as a workaround, using Atata API still would be preferable. Maybe, there is some well-known bug in chromedriver related to this issue?

CodePudding user response:

Although the test works for me, you can create your drag & drop behavior class:

public class DragsAndDropsUsingActionsStepByStepAttribute : DragAndDropBehaviorAttribute
{
    public override void Execute<TOwner>(IControl<TOwner> component, IControl<TOwner> target)
    {
        IWebElement sourceElement = component.Scope;
        IWebElement targetElement = component.Scope;

        Actions actions = new Actions(component.Context.Driver);
        actions.ClickAndHold(sourceElement);
        actions.MoveToElement(targetElement);
        actions.Perform();
        actions.Release(targetElement);
        actions.Perform();
    }
}

And apply it to Draggable property:

[FindById]
[DragsAndDropsUsingActionsStepByStep]
public Control<_> Draggable { get; private set; }
  • Related