Веб-драйвер Python: driver.get (URL) не открывается в unittest - работает через консоль

1

Так же, как название говорит, что у меня есть копия Selenium - установлена из svn repo

Когда я импортирую и запускаю вещи через консоль, все работает, когда я пытаюсь запустить unittest, даже экспортированный непосредственно из Selenium IDE

он откроет браузер и повесится, не пытаясь открыть URL-адрес

дополнительные детали

  • ОС: Ubuntu 11.04
  • Python: 2,7
  • Браузер: Firefox 7.0.1
    • попробовал с HTTPUNIT, хотя я продолжал получать незаконные ошибки характера

Код

import unittest
#import time
import re

from selenium import webdriver
#from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

#from local_config import BASE_URL, BASE_FOLDER, DRIVER
BASE_URL = 'http://localhost'
BASE_FOLDER = '/dir/to/site/'
DRIVER = 'FIREFOX'


class CheckSitemap(unittest.TestCase):

    def setUp(self):
        global BASE_URL
        global DRIVER
        if DRIVER == 'FIREFOX':
            self.driver = webdriver.Firefox()
        elif DRIVER == 'HTTPUNIT':
            self.driver = webdriver.Remote(desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT)
        else:
            raise Exception('DRIVER not set')
        self.driver.implicitly_wait(30)
        self.base_url = BASE_URL
#        print self.base_url
        self.verificationErrors = []

    def getSitemap(self):
        global BASE_FOLDER
        global DRIVER
#        print BASE_FOLDER
        driver = self.driver
        op1 = '%ssitemap.xml' % BASE_FOLDER
        if DRIVER == 'HTTPUNIT':
            op1 = '%s%s' % (self.base_url, op1[1:len(op1)])
#        print op1
        driver.get(op1.replace('//', '/'))
#        print 'HELLO WORLD!!'
        urls = []
#        print driver.page_source
        r = re.compile(r'<a href="(.*?)"')
        for match in r.finditer(driver.page_source):
            urls.append(match.group(1))
        if len(urls) == 0:
            r = re.compile(r'<loc>(.*?)</loc>', re.DOTALL)
            for match in r.finditer(driver.page_source):
                urls.append(match.group(1).strip())
        return urls

    def test_check_sitemap(self):
        global DRIVER
        driver = self.driver
        urls = self.getSitemap()
#        print urls
        for url in urls:
            if DRIVER == 'HTTPUNIT':
                driver.get(url)
            else:
                driver.get(url.replace(self.base_url, ''))

            if re.search(r"\.php on line [0-9]+", driver.page_source):
                self.verificationErrors.append('php error on %s' % url)

    def is_element_present(self, how, what):
        try:
            self.driver.find_element(by=how, value=what)
        except NoSuchElementException:
            return False
        return True

    def tearDown(self):
        self.driver.quit()
#        print self.verificationErrors
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

есть идеи?

  • 0
    Так можете ли вы подтвердить, что регулярное выражение в getSitemap находит какие-либо совпадения? У меня нет sitemap.xml для тестирования вашего кода, но что произойдет, если вы напечатаете возврат из URL-адресов как в цикле for, так и в длину URL-адресов в функции getSitemap
  • 0
    Какую версию Selenium вы используете?
Теги:
selenium
webdriver

1 ответ

2
Лучший ответ

Найденное решение, беседуя с AutomatedTester в IRC

в настоящее время реализация python webdriver игнорирует значение self.base_url

поэтому, когда вы.get() URL-адрес, вам нужно использовать полный URL-адрес

отчет об ошибке был подан и, скорее всего, будет обновлен в ближайшем будущем

Версия Webdriver 2.11.1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню