我是Docker容器的新手,所以我希望有人能指出一个问题,为什么我在Docker容器上尝试查找生产URL上的元素时,selenium测试总是失败
我正在尝试为我们的web应用程序在几个docker容器上同时运行登录测试。在我的主机上运行开发URL和生产URL时,该测试都非常有效,但只有在docker容器上点击开发URL时才通过。特别是,selenium在试图查找脚本中的第一个元素(登录页面上的用户名栏)时抛出Timeout
异常。当我获取url本身时,它不会抛出错误,因此我想知道是否有某种安全措施正在发生,即识别有一个VM设备试图在页面上刮取元素。由于该测试适用于docker容器中的一个url(以及我的主机上的两个url),因此我相当确定代码应该可以工作,这是一些安全问题。不过,下面是我收到的代码和stacktrace的描述
按照测试设置的方式,pytest夹具被传递到testcase,其中包含浏览器信息(chrome浏览器)和应用程序信息(包括我们的“应用程序类”的实例,该类设置url、登录信息等,以匹配环境:web应用程序的Dev/Prod)。testcase然后通过调用login函数尝试登录。这利用了一个定制的find函数来查找与css选择器匹配的元素列表。我们需要这个列表的第一个元素,因此我们将索引[0]
添加到find语句的末尾,如下所示:our_test_objects_browser.find('our_element')[0]
。更具体地说,这里是login函数(来自我们的login类),该函数在查找self.user
元素时被调用并失败:
def login(self):
self.browser.get(self.obc.obcUrl)
search_form = self.browser.find(self.user)[0]
search_form.clear()
search_form.send_keys(self.obc.username)
search_form = self.browser.find(self.password)[0]
search_form.clear()
search_form.send_keys(self.obc.password)
search_form.submit()
调用此方法的testcase如下所示:
def test_valid_login(obj_to_test):
start_time=time.time()
obj_to_test.login()
print("run_time is" +str(time.time()-start_time())
下面是故障的stacktrace:
================================== FAILURES ===================================
______________________________ test_valid_login _______________________________
obj_to_test = <obc.login.login.Login object at 0x0000026833AFD820>
def test_valid_login(obj_to_test):
start_time=time.time()
> obj_to_test.login()
tests\obc\test_login.py:23:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
src\obc\login\login.py:25: in login
search_form = self.browser.find(self.user)[0]
src\common\selenium_test.py:61: in find
return (self.wait.until(expected_conditions.presence_of_all_elements_located(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selenium.webdriver.support.wait.WebDriverWait (session="035a9153594f3ebe92663c5e4bc9b121")>
method = <selenium.webdriver.support.expected_conditions.presence_of_all_elements_located object at 0x0000026833ACAC10>
message = ''
def until(self, method, message=''):
"""Calls the method provided with the driver as an argument until the \
return value is not False."""
screen = None
stacktrace = None
end_time = time.time() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
c:\python\lib\site-packages\selenium\webdriver\support\wait.py:80: TimeoutException
============================== warnings summary ===============================
tests/obc/test_login.py::test_valid_login
c:\python\lib\site-packages\urllib3\connectionpool.py:997: InsecureRequestWarning: Unverified HTTPS request is being made to host 'flexonboardingn1.paychex.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
warnings.warn(
-- Docs: https://docs.pytest.org/en/latest/warnings.html
======================== 1 failed, 1 warning in 52.50s ========================
目前没有回答
相关问题 更多 >
编程相关推荐