#python #selenium #webdriver
#python #selenium #webdriver
Вопрос:
Как и сказано в названии, у меня есть копия Selenium, установленная из репозитория svn
Когда я импортирую и запускаю что-либо через консоль, все работает, когда я пытаюсь запустить 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()
есть идеи?
Комментарии:
1. Итак, можете ли вы подтвердить, что регулярное выражение в getSitemap находит какие-либо совпадения? У меня нет sitemap.xml чтобы протестировать ваш код, но что произойдет, если вы напечатаете возврат из URL-адресов как в цикле for, так и в len URL-адресов в функции getSitemap
2. Какую версию Selenium вы используете?
Ответ №1:
Нашел свое решение, пообщавшись с AutomatedTester в IRC
в настоящее время реализация python webdriver игнорирует значение self.base_url
поэтому, когда вы .get() вводите URL, вам нужно использовать полный URL
был отправлен отчет об ошибке, который, вероятно, будет обновлен в ближайшем будущем
Webdriver версии 2.11.1