【问题标题】:why does selenium code execute successsfully only in debug mode but fail in run mode?为什么 selenium 代码仅在调试模式下成功执行但在运行模式下失败?
【发布时间】:2017-07-10 18:41:32
【问题描述】:
C:\apache-tomcat-8.0.27>python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit      (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> webdriver.__version__
'3.0.2'
>>>

selenium python 测试代码如下:

driver.get("http://localhost:8080/")
self.assertEqual("Cubiender", driver.title)
driver.find_element_by_id("login_email").clear()
driver.find_element_by_id("login_email").send_keys("gin@cubi.com")
driver.find_element_by_id("login_pwd").clear()
driver.find_element_by_id("login_pwd").send_keys("pass")
driver.find_element_by_css_selector("input[type=\"submit\"]").click()

driver.find_element_by_link_text('Project List')
sleep(0.05)
driver.find_element_by_xpath("//input[@value='2588']").click()

sleep(0.05)
driver.find_element_by_css_selector("div.menu > #inquireProject").click()

以上代码在debug模式下可以成功运行,在debug模式下运行会失败 driver.find_element_by_xpath("//input[@value='2588']").click()

即使我添加了睡眠

堆栈跟踪:

C:\Python27\python.exe "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pycharm\utrunner.py" F:\python\sub_proj2.py true

测试于 10:53 开始 ...

Error
Traceback (most recent call last):
File "F:\python\sub_proj2.py", line 41, in test_untitled
driver.find_element_by_css_selector("span.triangle").click()
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 437, in find_element_by_css_selector
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
'value': value})['value']
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)

NoSuchElementException:消息:无法定位元素:span.triangle

进程以退出代码 0 结束

【问题讨论】:

  • 听上去是时间问题,为什么在点击元素之前要休眠呢?该输入是如何填充的?
  • 抛出的异常是什么?堆栈跟踪?
  • 尝试在sleep()内增加等待或使用explicit wait

标签: selenium selenium-webdriver webdriver selenium-ide


【解决方案1】:

请分享堆栈跟踪。

在我看来,

  • 您的value='2588 是动态的,并且随着每次实例负载而变化。
  • 可能是sleep 停止了整个过程。你为什么不使用wait,下面提到的一个例子。

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))

【讨论】:

    【解决方案2】:

    这可能是因为在调试模式下,它有更多的时间来查找元素。尝试增加睡眠时间或其他解决方案以确保元素已加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多