【问题标题】:Python Selenium webdriver throws Attribute errorPython Selenium webdriver 抛出属性错误
【发布时间】:2015-09-16 15:10:12
【问题描述】:

我在我们的框架中使用 python selenium webdriver,最近我们看到如下错误

(<type 'exceptions.AttributeError'>, 
AttributeError("'unicode' object has no   attribute 'text'",)
,<traceback     object at 0x00000000037D8D48>) 

而且我们在我们的产品中看到了这个错误,其中包含 unicode 字符。不会发生总是每 15 次发生一次。

堆栈跟踪:

self.compare_units_test('Singapore')
    line 391, in compare_units_test
    self.assertTrue(home_page.is_loaded(), Errors.HOMEPAGE_LOGO_ERROR)
    File "", line 32, in is_loaded
    "Logo did not load results in 10 seconds")
    File "\venv\lib\site-packages\pscore\core\support\ps_wait.py", line 20,in      until_visible
    self._wait_until_visible(locator, timeout, message, True)
    File "venv\lib\site-packages\pscore\core\support\ps_wait.py", line 15, in  _wait_until_visible
    wait.until(EC.visibility_of_element_located(locator), message=message)
   File "\venv\lib\site-packages\selenium\webdriver\support\wait.py", line 66, in until
    value = method(self._driver)
  File "\venv\lib\site- packages\selenium\webdriver\support\expected_conditions.py", line 72, in  __call__
    return _element_if_visible(_find_element(driver, self.locator))
   File \venv\lib\site- packages\selenium\webdriver\support\expected_conditions.py", line 90, in  _element_if_visible
    return element if element.is_displayed() else False
    AttributeError: 'unicode' object has no attribute 'is_displayed'

    2015-09-10 15:56:36 - INFO  wd_testcase.py:111 in run : Test Runner: Tearing down test: test_compare_units (tests.test.TestFlightsSearch)
2015-09-10 15:56:36 - INFO  wd_testcase.py:48 in tearDown : Test Runner: Attempting to teardown.
2015-09-10 15:56:36 - ERROR  wd_testcase.py:125 in run : Traceback (most recent call last):
  File \venv\lib\site-packages\pscore\core\wd_testcase.py", line 112, in run
    self.tearDown()
  File "\venv\lib\site-packages\pscore\core\wd_testcase.py", line 49, in tearDown
    WebDriverFinalizer.finalize(self.driver, self.has_failed(), self.logger, self.test_context)
  File "\venv\lib\site-packages\pscore\core\finalizers.py", line 28, in finalize
    WebDriverFinalizer.finalize_skygrid(driver, test_failed, test_context)    File "\lib\site-packages\pscore\core\finalizers.py", line 152, in finalize_skygrid
    WebDriverFinalizer.finalise_skygrid_driver_failure(driver, test_context)
    File "\venv\lib\site-packages\pscore\core\finalizers.py", line 168, in    finalise_skygrid_driver_failure
    final_url = driver.current_url
      File "venv\lib\site-   packages\selenium\webdriver\support\event_firing_webdriver.py", line 201, in    __getattr__
    raise AttributeError(name)AttributeError: current_url 

我们使用的是 2.45 版本的 selenium 和 2.7.7 版本的 python。

当我挖掘 webdriver 源代码时发现了这个

try:
str = basestring
except NameError:
pass

它专门解决了 webdriver 遇到的 unicode 问题。 有什么想法可能导致这种情况吗?非常感谢您的帮助

【问题讨论】:

  • 你在执行什么代码?它在代码的哪一行失败了?
  • 大多数时候我尝试使用`XPATH` self.driver.find_element(By.XPATH, "(//div[@class='browse-data-entry']/h3)[ {}]".format(index)).text
  • 它并不总是失败,间歇性失败,这让调试很痛苦,
  • 谢谢。测试失败时“定位器”的值是多少?
  • 理想情况下它应该返回文本,但有时我认为它具有 unicode 值

标签: python python-2.7 selenium selenium-webdriver


【解决方案1】:

找到了问题的根本原因,看起来其中一个测试正在生成一个新的浏览器窗口,随后的测试使用对话框窗口而不是浏览器窗口来执行 selenium 命令。在某些时候,其中一个测试执行了driver.quit,当随后的测试尝试访问driver.something时,由于驱动程序已经被杀死,它们失败了。

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 2017-04-11
    • 2017-05-18
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多