more selenium tests
This commit is contained in:
@@ -42,7 +42,7 @@ def NewPackageList(name=None, description=None, error=False, errormsg=None):
|
||||
_for="listname",
|
||||
_class=cls("font-bold", "w-1/2", "p-2", "text-center"),
|
||||
)
|
||||
with t.div(_class=cls("w-1/2")):
|
||||
with t.span(_class=cls("w-1/2")):
|
||||
t._input(
|
||||
type="text",
|
||||
id="listname",
|
||||
@@ -80,6 +80,7 @@ def NewPackageList(name=None, description=None, error=False, errormsg=None):
|
||||
_for="listdesc",
|
||||
_class=cls("font-bold", "w-1/2", "text-center"),
|
||||
)
|
||||
with t.span(_class=cls("w-1/2")):
|
||||
t._input(
|
||||
type="text",
|
||||
id="listdesc",
|
||||
@@ -87,7 +88,7 @@ def NewPackageList(name=None, description=None, error=False, errormsg=None):
|
||||
**{"value": description} if description is not None else {},
|
||||
_class=cls(
|
||||
"block",
|
||||
"w-1/2",
|
||||
"w-full",
|
||||
"p-2",
|
||||
"bg-gray-50",
|
||||
"appearance-none",
|
||||
|
||||
@@ -30,7 +30,7 @@ class PackageListTableRowEdit:
|
||||
if error:
|
||||
t.p(errormsg, _class=cls("text-red-400", "text-sm"))
|
||||
with t.div(_class=cls("flex", "flex-row", "h-full")):
|
||||
with t.div(
|
||||
with t.span(
|
||||
_class=cls(
|
||||
"border",
|
||||
"border-1",
|
||||
@@ -50,7 +50,7 @@ class PackageListTableRowEdit:
|
||||
"x-on:input": "edit_submit_enabled = $event.srcElement.value.trim().length !== 0;"
|
||||
},
|
||||
)
|
||||
with t.div(
|
||||
with t.span(
|
||||
_class=cls(
|
||||
"border", "border-1", "border-purple-500", "bg-purple-100"
|
||||
)
|
||||
@@ -79,6 +79,7 @@ class PackageListTableRowEdit:
|
||||
data_hx_target="closest tr",
|
||||
data_hx_swap="outerHTML",
|
||||
):
|
||||
with t.button():
|
||||
t.span(_class=cls("mdi", "mdi-cancel", "text-xl")),
|
||||
with t.td(
|
||||
id="edit-packagelist-save",
|
||||
@@ -105,12 +106,7 @@ class PackageListTableRowNormal:
|
||||
with t.tr(_class=cls("h-10", "even:bg-gray-100", "hover:bg-purple-200")) as doc:
|
||||
t.td(pkglist.name, _class=cls("border", "px-2")),
|
||||
t.td(str(pkglist.description), _class=cls("border", "px-2")),
|
||||
t.td(
|
||||
t.span(_class=cls("mdi", "mdi-delete", "text-xl")),
|
||||
id="delete-packagelist",
|
||||
data_hx_delete=f"/list/{pkglist.id}",
|
||||
data_hx_target="closest tr",
|
||||
data_hx_swap="outerHTML",
|
||||
with t.td(
|
||||
_class=cls(
|
||||
"border",
|
||||
"bg-red-200",
|
||||
@@ -118,8 +114,16 @@ class PackageListTableRowNormal:
|
||||
"cursor-pointer",
|
||||
"w-8",
|
||||
"text-center",
|
||||
),
|
||||
),
|
||||
)
|
||||
):
|
||||
with t.a(
|
||||
data_hx_delete=f"/list/{pkglist.id}",
|
||||
data_hx_target="closest tr",
|
||||
data_hx_swap="outerHTML",
|
||||
href=f"/list/{pkglist.id}/delete",
|
||||
):
|
||||
with t.button():
|
||||
t.span(_class=cls("mdi", "mdi-delete", "text-xl"))
|
||||
with t.td(
|
||||
_class=cls(
|
||||
"border",
|
||||
@@ -131,17 +135,15 @@ class PackageListTableRowNormal:
|
||||
)
|
||||
):
|
||||
with t.a(
|
||||
id="edit-packagelist",
|
||||
data_hx_post=f"/list/{pkglist.id}/edit",
|
||||
href=f"/?edit={pkglist.id}",
|
||||
data_hx_target="closest tr",
|
||||
data_hx_swap="outerHTML",
|
||||
):
|
||||
t.span(_class=cls("mdi", "mdi-pencil", "text-xl")),
|
||||
t.td(
|
||||
t.span(_class=cls("mdi", "mdi-arrow-right", "text-xl")),
|
||||
id="edit-packagelist",
|
||||
# data_hx_post=f"/list/{pkglist.id}/show",
|
||||
):
|
||||
with t.button():
|
||||
t.span(_class=cls("mdi", "mdi-pencil", "text-xl")),
|
||||
with t.td(
|
||||
_class=cls(
|
||||
"border",
|
||||
"bg-green-200",
|
||||
@@ -149,8 +151,11 @@ class PackageListTableRowNormal:
|
||||
"cursor-pointer",
|
||||
"w-8",
|
||||
"text-center",
|
||||
),
|
||||
),
|
||||
)
|
||||
):
|
||||
with t.button():
|
||||
t.span(_class=cls("mdi", "mdi-arrow-right", "text-xl"))
|
||||
# data_hx_post=f"/list/{pkglist.id}/show",
|
||||
self.doc = doc
|
||||
|
||||
|
||||
|
||||
@@ -245,6 +245,15 @@ def edit_list(id):
|
||||
return make_response(out.render(), 200)
|
||||
|
||||
|
||||
@app.route("/list/<uuid:id>/delete", methods=["GET"])
|
||||
def delete_list_via_get(id):
|
||||
if not delete_packagelist(id=id):
|
||||
return make_response("", 404)
|
||||
r = make_response("", 303)
|
||||
r.headers["Location"] = "/"
|
||||
return r
|
||||
|
||||
|
||||
@app.route("/list/<uuid:id>", methods=["DELETE"])
|
||||
def delete_list(id):
|
||||
if not delete_packagelist(id=id):
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import time
|
||||
import argparse
|
||||
import code
|
||||
import readline
|
||||
|
||||
from helium import *
|
||||
import selenium
|
||||
@@ -8,21 +11,24 @@ import selenium
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--repl", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
opts = selenium.webdriver.firefox.options.Options()
|
||||
|
||||
profile = selenium.webdriver.FirefoxProfile()
|
||||
profile.set_preference("javascript.enabled", "false")
|
||||
profile.DEFAULT_PREFERENCES['frozen']['javascript.enabled'] = False
|
||||
opts.profile = profile
|
||||
for has_javascript in [True, False]:
|
||||
profile = selenium.webdriver.FirefoxProfile()
|
||||
profile.DEFAULT_PREFERENCES["frozen"]["javascript.enabled"] = has_javascript
|
||||
opts.profile = profile
|
||||
|
||||
driver = selenium.webdriver.Remote(
|
||||
command_executor="http://localhost:4444/wd/hub",
|
||||
options=opts,
|
||||
)
|
||||
driver.implicitly_wait(0)
|
||||
Config.implicit_wait_secs = 1
|
||||
driver = selenium.webdriver.Remote(
|
||||
command_executor="http://localhost:4444/wd/hub", options=opts
|
||||
)
|
||||
driver.implicitly_wait(0)
|
||||
Config.implicit_wait_secs = 1
|
||||
|
||||
try:
|
||||
try:
|
||||
helium.set_driver(driver)
|
||||
helium.go_to("http://localhost:5000")
|
||||
|
||||
@@ -40,27 +46,95 @@ try:
|
||||
|
||||
assert len(lists_before) == len(lists_after) - 1
|
||||
|
||||
nameidx = next(i for i,v in enumerate(find_all(S("table > thead > tr > th"))) if v.web_element.text == "Name")
|
||||
descidx = next(i for i,v in enumerate(find_all(S("table > thead > tr > th"))) if v.web_element.text == "Description")
|
||||
nameidx = next(
|
||||
i
|
||||
for i, v in enumerate(find_all(S("table > thead > tr > th")))
|
||||
if v.web_element.text == "Name"
|
||||
)
|
||||
descidx = next(
|
||||
i
|
||||
for i, v in enumerate(find_all(S("table > thead > tr > th")))
|
||||
if v.web_element.text == "Description"
|
||||
)
|
||||
|
||||
new_entry = lists_after[-1]
|
||||
write("newlist2", into=TextField(to_right_of="Name"))
|
||||
write("newlistdesc2", into=TextField(to_right_of="Description"))
|
||||
click(Button("Add"))
|
||||
|
||||
cells = new_entry.web_element.find_elements_by_tag_name("td")
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
assert len(lists_before) == len(lists_after) - 2
|
||||
|
||||
new_entry1 = lists_after[-2]
|
||||
cells = new_entry1.web_element.find_elements_by_tag_name("td")
|
||||
assert cells[nameidx].text == "newlist"
|
||||
assert cells[descidx].text == "newlistdesc"
|
||||
|
||||
lists_before = lists_after
|
||||
new_entry2 = lists_after[-1]
|
||||
cells = new_entry2.web_element.find_elements_by_tag_name("td")
|
||||
assert cells[nameidx].text == "newlist2"
|
||||
assert cells[descidx].text == "newlistdesc2"
|
||||
|
||||
deletebtn = new_entry.web_element.find_element_by_class_name("mdi-delete")
|
||||
editbtn = new_entry1.web_element.find_element_by_class_name("mdi-pencil")
|
||||
click(editbtn)
|
||||
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
editrow = find_all(S("table > tbody > tr"))[-2]
|
||||
|
||||
inputs = editrow.web_element.find_elements_by_xpath("//input")
|
||||
write("editedname", into=inputs[0])
|
||||
write("editeddesc", into=inputs[1])
|
||||
|
||||
savebtn = editrow.web_element.find_element_by_class_name("mdi-content-save")
|
||||
click(savebtn)
|
||||
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
new_entry1 = lists_after[-2]
|
||||
|
||||
cells = new_entry1.web_element.find_elements_by_tag_name("td")
|
||||
assert cells[nameidx].text == "editedname"
|
||||
assert cells[descidx].text == "editeddesc"
|
||||
|
||||
editbtn = new_entry1.web_element.find_element_by_class_name("mdi-pencil")
|
||||
click(editbtn)
|
||||
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
editrow = find_all(S("table > tbody > tr"))[-2]
|
||||
|
||||
inputs = editrow.web_element.find_elements_by_xpath("//input")
|
||||
write("editedname_again", into=inputs[0])
|
||||
write("editeddesc_again", into=inputs[1])
|
||||
|
||||
cancelbtn = editrow.web_element.find_element_by_class_name("mdi-cancel")
|
||||
click(cancelbtn)
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
new_entry1 = lists_after[-2]
|
||||
|
||||
cells = new_entry1.web_element.find_elements_by_tag_name("td")
|
||||
assert cells[nameidx].text == "editedname"
|
||||
assert cells[descidx].text == "editeddesc"
|
||||
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
|
||||
new_entry1 = lists_after[-2]
|
||||
deletebtn = new_entry1.web_element.find_element_by_class_name("mdi-delete")
|
||||
click(deletebtn)
|
||||
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
|
||||
assert len(lists_before) - 1 == len(lists_after)
|
||||
assert len(lists_before) + 1 == len(lists_after)
|
||||
|
||||
import code; code.interact(local=locals())
|
||||
time.sleep(5)
|
||||
finally:
|
||||
new_entry2 = lists_after[-1]
|
||||
deletebtn = new_entry2.web_element.find_element_by_class_name("mdi-delete")
|
||||
click(deletebtn)
|
||||
lists_after = find_all(S("table > tbody > tr", below=Text("Package Lists")))
|
||||
|
||||
assert len(lists_before) == len(lists_after)
|
||||
|
||||
if args.repl:
|
||||
code.InteractiveConsole(locals=globals()).interact()
|
||||
|
||||
finally:
|
||||
driver.quit()
|
||||
|
||||
|
||||
time.sleep(5)
|
||||
|
||||
Reference in New Issue
Block a user