insure no exception (if failed, return 0) and change 'load' to 'networkidle'
This commit is contained in:
@@ -444,7 +444,7 @@ def get_open_tabs_info(env, config: Dict[str, str]):
|
|||||||
for page in context.pages:
|
for page in context.pages:
|
||||||
try:
|
try:
|
||||||
# Wait for the page to finish loading, this prevents the "execution context was destroyed" issue
|
# Wait for the page to finish loading, this prevents the "execution context was destroyed" issue
|
||||||
page.wait_for_load_state('load') # Wait for the 'load' event to complete
|
page.wait_for_load_state('networkidle') # Wait for the 'load' event to complete
|
||||||
title = page.title()
|
title = page.title()
|
||||||
url = page.url
|
url = page.url
|
||||||
tabs_info.append({'title': title, 'url': url})
|
tabs_info.append({'title': title, 'url': url})
|
||||||
@@ -486,12 +486,17 @@ def get_active_url_from_accessTree(env, config):
|
|||||||
# first, use accessibility API to get the active tab URL
|
# first, use accessibility API to get the active tab URL
|
||||||
at: _Element = lxml.etree.fromstring(accessibility_tree)
|
at: _Element = lxml.etree.fromstring(accessibility_tree)
|
||||||
arch = platform.machine()
|
arch = platform.machine()
|
||||||
if "arm" in arch:
|
print("Your architecture is: {}".format(arch))
|
||||||
selector = CSSSelector(", application[name=Chromium] entry[name=Address\\ and\\ search\\ bar]",
|
try:
|
||||||
namespaces=_accessibility_ns_map)
|
if "arm" in arch:
|
||||||
else:
|
selector = CSSSelector("application[name=Chromium] entry[name=Address\\ and\\ search\\ bar]",
|
||||||
selector = CSSSelector("application[name=Google\\ Chrome] entry[name=Address\\ and\\ search\\ bar]",
|
namespaces=_accessibility_ns_map)
|
||||||
namespaces=_accessibility_ns_map)
|
else:
|
||||||
|
selector = CSSSelector("application[name=Google\\ Chrome] entry[name=Address\\ and\\ search\\ bar]",
|
||||||
|
namespaces=_accessibility_ns_map)
|
||||||
|
except:
|
||||||
|
logger.error("Failed to parse the selector for active tab URL")
|
||||||
|
return None
|
||||||
elements: List[_Element] = selector(at)
|
elements: List[_Element] = selector(at)
|
||||||
# if "xpath" in config:
|
# if "xpath" in config:
|
||||||
# elements: List[_Element] = at.xpath(config["xpath"], namespaces=_accessibility_ns_map)
|
# elements: List[_Element] = at.xpath(config["xpath"], namespaces=_accessibility_ns_map)
|
||||||
@@ -519,6 +524,9 @@ def get_active_tab_info(env, config: Dict[str, str]):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
active_tab_url = get_active_url_from_accessTree(env, config)
|
active_tab_url = get_active_url_from_accessTree(env, config)
|
||||||
|
if active_tab_url is None:
|
||||||
|
logger.error("Failed to get the url of active tab")
|
||||||
|
return None
|
||||||
host = env.vm_ip
|
host = env.vm_ip
|
||||||
port = 9222 # fixme: this port is hard-coded, need to be changed from config file
|
port = 9222 # fixme: this port is hard-coded, need to be changed from config file
|
||||||
|
|
||||||
@@ -533,7 +541,11 @@ def get_active_tab_info(env, config: Dict[str, str]):
|
|||||||
active_tab_info = {}
|
active_tab_info = {}
|
||||||
# go to the target URL page
|
# go to the target URL page
|
||||||
page = browser.new_page()
|
page = browser.new_page()
|
||||||
page.goto(active_tab_url)
|
try:
|
||||||
|
page.goto(active_tab_url)
|
||||||
|
except:
|
||||||
|
logger.error("Failed to go to the target URL page")
|
||||||
|
return None
|
||||||
page.wait_for_load_state('load') # Wait for the 'load' event to complete
|
page.wait_for_load_state('load') # Wait for the 'load' event to complete
|
||||||
active_tab_info = {
|
active_tab_info = {
|
||||||
'title': page.title(),
|
'title': page.title(),
|
||||||
@@ -972,6 +984,8 @@ def get_active_tab_html_parse(env, config: Dict[str, Any]):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
active_tab_url = get_active_url_from_accessTree(env, config)
|
active_tab_url = get_active_url_from_accessTree(env, config)
|
||||||
|
if not isinstance(active_tab_url, str):
|
||||||
|
return None
|
||||||
host = env.vm_ip
|
host = env.vm_ip
|
||||||
port = 9222 # fixme: this port is hard-coded, need to be changed from config file
|
port = 9222 # fixme: this port is hard-coded, need to be changed from config file
|
||||||
|
|
||||||
@@ -1002,9 +1016,11 @@ def get_active_tab_html_parse(env, config: Dict[str, Any]):
|
|||||||
target_page = None
|
target_page = None
|
||||||
for context in browser.contexts:
|
for context in browser.contexts:
|
||||||
for page in context.pages:
|
for page in context.pages:
|
||||||
page.wait_for_load_state("load")
|
page.wait_for_load_state("networkidle")
|
||||||
if page.url == active_tab_url:
|
if page.url == active_tab_url:
|
||||||
target_page = page
|
target_page = page
|
||||||
|
print("tartget page url: ", target_page.url)
|
||||||
|
print("tartget page title: ", target_page.title())
|
||||||
break
|
break
|
||||||
if target_page is None:
|
if target_page is None:
|
||||||
return {}
|
return {}
|
||||||
|
|||||||
@@ -165,7 +165,10 @@ def get_rule_relativeTime(env, config: R) -> R:
|
|||||||
next_day = 11
|
next_day = 11
|
||||||
to_absoluteDay = datetime(next_year, next_month, next_day)
|
to_absoluteDay = datetime(next_year, next_month, next_day)
|
||||||
elif to_time == "next Friday":
|
elif to_time == "next Friday":
|
||||||
to_absoluteDay = now + timedelta(days=((4-now.weekday()) if now.weekday() < 4 else (6-now.weekday()) + 5))
|
if now.weekday() < 4 and from_time in ["next Monday"]:
|
||||||
|
to_absoluteDay = now + timedelta(days=((4-now.weekday())+7))
|
||||||
|
else:
|
||||||
|
to_absoluteDay = now + timedelta(days=((4-now.weekday()) if now.weekday() < 4 else (6-now.weekday()) + 5))
|
||||||
else:
|
else:
|
||||||
pass # more rules here
|
pass # more rules here
|
||||||
regular_to_time = apply_rules_to_timeFormat(relativeRules["expected"]["to"], to_absoluteDay)
|
regular_to_time = apply_rules_to_timeFormat(relativeRules["expected"]["to"], to_absoluteDay)
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
"expected": {
|
"expected": {
|
||||||
"fromStation": "BOM",
|
"fromStation": "BOM",
|
||||||
"toStation": "STO",
|
"toStation": "STO",
|
||||||
"time": "{Year}-{Month0D}-{DayD}"
|
"time": "{Year}-{Month0D}-{Day0D}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,8 +65,8 @@
|
|||||||
"to": "this Sunday"
|
"to": "this Sunday"
|
||||||
},
|
},
|
||||||
"expected": {
|
"expected": {
|
||||||
"from": "{DoW}, {Month} {DayD}",
|
"from": "{DoW}, {Month} {Day0D}",
|
||||||
"to": "{DoW}, {Month} {DayD}",
|
"to": "{DoW}, {Month} {Day0D}",
|
||||||
"city": "New York City Hotels",
|
"city": "New York City Hotels",
|
||||||
"adult": "2 adults",
|
"adult": "2 adults",
|
||||||
"rank": "Price (low to high)"
|
"rank": "Price (low to high)"
|
||||||
|
|||||||
@@ -22,6 +22,20 @@
|
|||||||
"tcp:localhost:1337"
|
"tcp:localhost:1337"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "chrome_open_tabs",
|
||||||
|
"parameters": {
|
||||||
|
"urls_to_open": [
|
||||||
|
"https://seatgeek.com/"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "activate_window",
|
||||||
|
"parameters": {
|
||||||
|
"window_name": "Google Chrome"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"trajectory": "trajectories/",
|
"trajectory": "trajectories/",
|
||||||
@@ -37,7 +51,7 @@
|
|||||||
"expected":{
|
"expected":{
|
||||||
"type": "rule",
|
"type": "rule",
|
||||||
"rules":{
|
"rules":{
|
||||||
"expected": ["https://seatgeek\\.com/help/articles/\\d+-Buying-Tickets"]
|
"expected": ["Buying-Tickets"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user