我正在为我的公司自动化IdentiGO应用程序,我得到了以下错误:
Internal Server Error: /identigo
Traceback (most recent call last):
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/Users/jane/Code/maynard_env/maynard/employee/views.py", line 63, in post
driver.main(employee)
File "/Users/jane/Code/maynard_env/maynard/employee/driver.py", line 31, in main
WebDriverWait(driver, 1000000).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[3]/div/button/span'))).click()
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: Element <span class="ui-button-text"> could not be scrolled into view
下面是我的代码,省略了导致这个页面的脚本,因为它们与我的问题无关。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 1000000).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[3]/div/button/span'))).click()
在此代码之前的页面上,用户选择约会日期和时间的位置;我希望脚本等待“Go”按钮被按下,然后单击下面屏幕截图中的“Continue”:
如果你想看到确切的页面,请转到this url,然后你必须使用以下信息进行一系列POST请求:
- 单击安排新约会
- 其他
- 供应商和承包商(儿童)
- tnvc00047
- 37204
- 随机预约日期
任何建议将真的很感激!
更新
下面是一个JS Fiddle与页面的html:
https://jsfiddle.net/khf4tym3/
当我点击“查看页面源代码”时,弹出的html并没有显示在源代码中,所以我假设它是用JS生成的。
<div class="ui-dialog-buttonset">
<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button" aria-disabled="false">
<span class="ui-button-text">Continue</span>
</button>
</div>
更新2
如果我将WebDriverWait(driver, 1000000)
改为WebDriverWait(driver, 30)
,我会得到以下错误:
Internal Server Error: /identigo
Traceback (most recent call last):
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/Users/jane/Code/maynard_env/maynard/employee/views.py", line 63, in post
driver.main(employee)
File "/Users/jane/Code/maynard_env/maynard/employee/driver.py", line 34, in main
element=WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,"//div[@class='ui-dialog-buttonset']/button[@class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only']/span[contains(.,'Continue')]")))
File "/Users/jane/Code/maynard_env/env/lib/python3.7/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Python小提琴
代码的项目,所以你可以跳过论坛条目。
https://jsfiddle.net/93k5s2xg/1/
工作溶液:
WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "//div[starts-with(@aria-describedby, 'ui-id-')]//span[@class='ui-button-text' and text()='Continue']"))).click()
4条答案
按热度按时间lymnna711#
此错误消息...
...意味着WebDriver示例即 driver 无法滚动Viewport中的元素以调用
click()
。首先,由于你的用例是在元素上调用
click()
,理想情况下,你需要使用 ExpectedConditions 作为**element_to_be_clickable()
**,而不是使用presence_of_element_located()
,如下所示:您可以在以下内容中找到一些详细的讨论:
作为替代,根据错误消息,在调用
click()
之前,您也可以使用Element.scrollIntoView()方法来滚动Viewport中的元素。您可以在以下内容中找到详细的讨论:- 不同的滚动选项之间有什么区别?
在这一点上值得一提的是,以下方法:
将自动滚动**Viewport 中的元素。
您可以在以下内容中找到详细的讨论:- 如何在Python中使用selenium webdriver滚动网页,而不使用JavaScript方法execute_script()
本用例
文本为Continue的按钮位于 Top Level Content 中,但在 Modal Dialog Box 中呈现。
DevTools快照:
由于所需的元素位于 Modal Dialog Box 中,因此要在元素上定位和调用
click()
,您必须为element_to_be_clickable()
引入 WebDriverWait,您可以使用以下定位器策略:XPATH
:*注意:需要添加以下导入:
DevTools快照:
dzhpxtsq2#
使用下面的xpath并单击它。
如果上面的点击不工作,然后尝试下面的一个。
或者你可以使用javascript executor来点击。
EDITED
**尝试下面的代码,它是点击继续按钮,其中既继续和取消按钮在那里。一旦你点击继续,你将另一个继续按钮点击。代码我已经从日程表应用程序更新。
此代码在Chrome浏览器和Windows 10操作系统上运行良好。我已经测试了几次。
bfrts1fy3#
如果有人仍然有这个问题,我通过设置窗口大小来修复它。Java中的例子:
driver.manage().window().setSize(new Dimension(5120, 2880));
。jfewjypa4#
为了解决这个问题,我只是在我的WebDriverManager类中为所有测试添加了这一行:getWebDriver().manage().window().maximize();