如何解决通过可访问性 id 查找元素时 NoSuchElementException 的返回值是什么?
我已经用 selenium 编写了一个测试脚本。在其中,我尝试使用以下代码使用可访问性 ID 查找元素:
someUIElement = self.driver.find_element_by_accessibility_id('some UI element')
但是,我在上面的行中收到了 'NoSuchElementException'。
我尝试执行以下操作:
if self.driver.find_element_by_accessibility_id('some UI element') != None:
//do something
但是,它仍然抛出相同的异常,证明该值绝对不是“无”。 我想知道当抛出以下异常时,变量“someUIElement”将返回什么值?
错误跟踪:
self = <test_edit_profile.EditProfileTests testMethod=testPreOrderForPrevIoUsOrders>
def testPreOrderForPrevIoUsOrders(self):
self.driver.implicitly_wait(90)
if self.driver.find_element_by_accessibility_id('EditProfileButton') != None:
manageOrdersCell = self.driver.find_element_by_accessibility_id('Manage OrdersCell')
manageOrdersCell.click()
self.driver.implicitly_wait(5)
> if self.driver.find_element_by_accessibility_id('Reorder Button') != NoSuchElementException:
test_edit_profile.py:319:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/appium/webdriver/extensions/search_context/mobile.py:47: in find_element_by_accessibility_id
return self.find_element(by=MobileBy.ACCESSIBILITY_ID,value=accessibility_id)
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/appium/webdriver/webdriver.py:282: in find_element
return self.execute(RemoteCommand.FIND_ELEMENT,{'using': by,'value': value})['value']
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py:321: in execute
self.error_handler.check_response(response)
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/appium/webdriver/errorhandler.py:31: in check_response
raise wde
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/appium/webdriver/errorhandler.py:26: in check_response
super().check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <appium.webdriver.errorhandler.MobileErrorHandler object at 0x7fc1f00f62b0>
response = {'status': 404,'value': '{"value":{"error":"no such element","message":"An element Could not be located on the page u...11)\\n at runMicrotasks (<anonymous>)\\n at processticksAndRejections (internal/process/task_queues.js:85:5)"}}'}
def check_response(self,response):
"""
Checks that a JSON response from the WebDriver does not have an error.
:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.
:Raises: If the response contains an error message.
"""
status = response.get('status',None)
if status is None or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message","")
screen = response.get("screen","")
stacktrace = None
if isinstance(status,int):
value_json = response.get('value',None)
if value_json and isinstance(value_json,basestring):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error',None)
if status is None:
status = value["status"]
message = value["value"]
if not isinstance(message,basestring):
value = message
message = message.get('message')
else:
message = value.get('message',None)
except ValueError:
pass
exception_class = ErrorInResponseException
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INteraCTABLE:
exception_class = ElementnotinteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnabletoSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNowN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpecteDalertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_Failed:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetoutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = invalidargumentexception
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNowN_METHOD:
exception_class = UnkNownMethodException
else:
exception_class = WebDriverException
if value == '' or value is None:
value = response['value']
if isinstance(value,basestring):
if exception_class == ErrorInResponseException:
raise exception_class(response,value)
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']
screen = None
if 'screen' in value:
screen = value['screen']
stacktrace = None
if 'stackTrace' in value and value['stackTrace']:
stacktrace = []
try:
for frame in value['stackTrace']:
line = self._value_or_default(frame,'lineNumber','')
file = self._value_or_default(frame,'fileName','<anonymous>')
if line:
file = "%s:%s" % (file,line)
meth = self._value_or_default(frame,'methodName','<anonymous>')
if 'className' in frame:
meth = "%s.%s" % (frame['className'],meth)
msg = " at %s (%s)"
msg = msg % (meth,file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == ErrorInResponseException:
raise exception_class(response,message)
elif exception_class == UnexpecteDalertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message,screen,stacktrace,alert_text)
> raise exception_class(message,stacktrace)
E selenium.common.exceptions.NoSuchElementException: Message: An element Could not be located on the page using the given search parameters.
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py:242: NoSuchElementException
======================================================================================== short test summary info ========================================================================================
Failed test_edit_profile.py::EditProfileTests::testPreOrderForPrevIoUsOrders - selenium.common.exceptions.NoSuchElementException: Message: An element Could not be located on the page using the given...
========================================================================================== 1 Failed in 59.56s ===========================================================================================
解决方法
异常发生在 self.driver.find_element_by_accessibility_id('Reorder Button')
内。因此,如果您尝试在条件或变量赋值中使用它,我相信异常会阻止上述操作甚至被尝试。
字面意思是没有找到该元素。
这可能是由于错误的定位器或在 find_element
方法之前丢失/等待时间过短/延迟造成的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。