Skip to content

Commit e7e0f52

Browse files
authored
fix: drag and drop with position (microsoft#1180)
1 parent d1504b4 commit e7e0f52

File tree

6 files changed

+99
-12
lines changed

6 files changed

+99
-12
lines changed

playwright/_impl/_frame.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,8 +547,8 @@ async def drag_and_drop(
547547
self,
548548
source: str,
549549
target: str,
550-
source_position: Position = None,
551-
target_position: Position = None,
550+
sourcePosition: Position = None,
551+
targetPosition: Position = None,
552552
force: bool = None,
553553
noWaitAfter: bool = None,
554554
strict: bool = None,

playwright/_impl/_page.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -737,8 +737,8 @@ async def drag_and_drop(
737737
self,
738738
source: str,
739739
target: str,
740-
source_position: Position = None,
741-
target_position: Position = None,
740+
sourcePosition: Position = None,
741+
targetPosition: Position = None,
742742
force: bool = None,
743743
noWaitAfter: bool = None,
744744
timeout: float = None,

playwright/async_api/_generated.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4644,8 +4644,8 @@ async def drag_and_drop(
46444644
self._impl_obj.drag_and_drop(
46454645
source=source,
46464646
target=target,
4647-
source_position=source_position,
4648-
target_position=target_position,
4647+
sourcePosition=source_position,
4648+
targetPosition=target_position,
46494649
force=force,
46504650
noWaitAfter=no_wait_after,
46514651
strict=strict,
@@ -8782,8 +8782,8 @@ async def drag_and_drop(
87828782
self._impl_obj.drag_and_drop(
87838783
source=source,
87848784
target=target,
8785-
source_position=source_position,
8786-
target_position=target_position,
8785+
sourcePosition=source_position,
8786+
targetPosition=target_position,
87878787
force=force,
87888788
noWaitAfter=no_wait_after,
87898789
timeout=timeout,

playwright/sync_api/_generated.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4588,8 +4588,8 @@ def drag_and_drop(
45884588
self._impl_obj.drag_and_drop(
45894589
source=source,
45904590
target=target,
4591-
source_position=source_position,
4592-
target_position=target_position,
4591+
sourcePosition=source_position,
4592+
targetPosition=target_position,
45934593
force=force,
45944594
noWaitAfter=no_wait_after,
45954595
strict=strict,
@@ -8591,8 +8591,8 @@ def drag_and_drop(
85918591
self._impl_obj.drag_and_drop(
85928592
source=source,
85938593
target=target,
8594-
source_position=source_position,
8595-
target_position=target_position,
8594+
sourcePosition=source_position,
8595+
targetPosition=target_position,
85968596
force=force,
85978597
noWaitAfter=no_wait_after,
85988598
timeout=timeout,

tests/async/test_locators.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,49 @@ async def test_drag_to(page: Page, server: Server) -> None:
599599
)
600600

601601

602+
async def test_drag_to_with_position(page: Page, server: Server):
603+
await page.goto(server.EMPTY_PAGE)
604+
await page.set_content(
605+
"""
606+
<div style="width:100px;height:100px;background:red;" id="red">
607+
</div>
608+
<div style="width:100px;height:100px;background:blue;" id="blue">
609+
</div>
610+
"""
611+
)
612+
events_handle = await page.evaluate_handle(
613+
"""
614+
() => {
615+
const events = [];
616+
document.getElementById('red').addEventListener('mousedown', event => {
617+
events.push({
618+
type: 'mousedown',
619+
x: event.offsetX,
620+
y: event.offsetY,
621+
});
622+
});
623+
document.getElementById('blue').addEventListener('mouseup', event => {
624+
events.push({
625+
type: 'mouseup',
626+
x: event.offsetX,
627+
y: event.offsetY,
628+
});
629+
});
630+
return events;
631+
}
632+
"""
633+
)
634+
await page.locator("#red").drag_to(
635+
page.locator("#blue"),
636+
source_position={"x": 34, "y": 7},
637+
target_position={"x": 10, "y": 20},
638+
)
639+
assert await events_handle.json_value() == [
640+
{"type": "mousedown", "x": 34, "y": 7},
641+
{"type": "mouseup", "x": 10, "y": 20},
642+
]
643+
644+
602645
async def test_locator_query_should_filter_by_text(page: Page, server: Server) -> None:
603646
await page.set_content("<div>Foobar</div><div>Bar</div>")
604647
await expect(page.locator("div", has_text="Foo")).to_have_text("Foobar")

tests/async/test_page.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,50 @@ async def test_drag_and_drop_helper_method(page: Page, server: Server):
12921292
)
12931293

12941294

1295+
async def test_drag_and_drop_with_position(page: Page, server: Server):
1296+
await page.goto(server.EMPTY_PAGE)
1297+
await page.set_content(
1298+
"""
1299+
<div style="width:100px;height:100px;background:red;" id="red">
1300+
</div>
1301+
<div style="width:100px;height:100px;background:blue;" id="blue">
1302+
</div>
1303+
"""
1304+
)
1305+
events_handle = await page.evaluate_handle(
1306+
"""
1307+
() => {
1308+
const events = [];
1309+
document.getElementById('red').addEventListener('mousedown', event => {
1310+
events.push({
1311+
type: 'mousedown',
1312+
x: event.offsetX,
1313+
y: event.offsetY,
1314+
});
1315+
});
1316+
document.getElementById('blue').addEventListener('mouseup', event => {
1317+
events.push({
1318+
type: 'mouseup',
1319+
x: event.offsetX,
1320+
y: event.offsetY,
1321+
});
1322+
});
1323+
return events;
1324+
}
1325+
"""
1326+
)
1327+
await page.drag_and_drop(
1328+
"#red",
1329+
"#blue",
1330+
source_position={"x": 34, "y": 7},
1331+
target_position={"x": 10, "y": 20},
1332+
)
1333+
assert await events_handle.json_value() == [
1334+
{"type": "mousedown", "x": 34, "y": 7},
1335+
{"type": "mouseup", "x": 10, "y": 20},
1336+
]
1337+
1338+
12951339
async def test_should_check_box_using_set_checked(page: Page):
12961340
await page.set_content("`<input id='checkbox' type='checkbox'></input>`")
12971341
await page.set_checked("input", True)

0 commit comments

Comments
 (0)