[Pkg-giraffe-discuss] autopkgtest in kopano-webapp

Carsten Schoenert c.schoenert at t-online.de
Tue Dec 25 18:11:59 GMT 2018


Hi,

I tried to play around with the non working autopkgtest in kopano-webapp.

In preparation for 3.5.0 I added a missing 'need-root' to the control
file due the needed database setup. But then you get a warning about
phantomjs isn't supported any more, you need to work now in headless
mode. After some searching what's needed to get changed for this I got
this now working by this change.

> diff --git a/debian/tests/test_webapp.py b/debian/tests/test_webapp.py
> index 421369b..b8eb84d 100644
> --- a/debian/tests/test_webapp.py
> +++ b/debian/tests/test_webapp.py
> @@ -10,6 +10,11 @@ from selenium.webdriver.common.keys import Keys
>  from selenium.webdriver.support.ui import WebDriverWait
>  from selenium.common.exceptions import TimeoutException, NoSuchElementException
>  
> +chrome_options = webdriver.ChromeOptions()
> +chrome_options.add_argument('--headless')
> +chrome_options.add_argument('--no-sandbox')
> +chrome_options.add_argument('--window-size=1120x550')
> +
>  URL = os.getenv('WEBAPP_URL', 'http://127.0.0.1/webapp/')
>  auth_user = os.environ['AUTH_USER']
>  auth_pass = os.environ['AUTH_PASS']
> @@ -18,8 +23,9 @@ auth_pass = os.environ['AUTH_PASS']
>  class TestWebApp(unittest.TestCase):
>  
>      def setUp(self):
> -        self.driver = webdriver.PhantomJS()
> -        self.driver.set_window_size(1120, 550)
> +        self.driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver',
> +                      chrome_options=chrome_options,
> +                      service_args=['--verbose', '--log-path=/tmp/chromedriver.log'])
>  
>      def tearDown(self):
>          self.driver.quit()

The current implementation can be reduced later a bit for sure, it's
mostly some dirty C&P for now to get it working. It working ... but now
we get a Python Traceback due some left over coding issue due changes to
Python?

> Processing triggers for systemd (240-1) ...
> + grep -qs User created.
> + kopano-admin -c mailtest -p r00tme -e admin at example.com -f Mail test user -a 1
> + cd debian/tests
> + export AUTH_USER=mailtest
> + export AUTH_PASS=r00tme
> + nosetests
> E
> ======================================================================
> ERROR: test_login (test_webapp.TestWebApp)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File "/tmp/autopkgtest.Loh9WK/build.l9h/src/debian/tests/test_webapp.py", line 53, in test_login
>     elem = self.find_element_by_('name', 'username')
>   File "/tmp/autopkgtest.Loh9WK/build.l9h/src/debian/tests/test_webapp.py", line 41, in find_element_by_
>     return find_element_by_(name)
> TypeError: 'str' object is not callable
> -------------------- >> begin captured logging << --------------------
> selenium.webdriver.remote.remote_connection: DEBUG: POST http://127.0.0.1:46767/session {"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"args": ["--headless", "--no-sandbox", "--window-size=1120x550"], "extensions": []}, "browserName": "chrome", "platformName": "any"}, "firstMatch": [{}]}, "desiredCapabilities": {"goog:chromeOptions": {"args": ["--headless", "--no-sandbox", "--window-size=1120x550"], "extensions": []}, "platform": "ANY", "browserName": "chrome", "version": ""}}
> urllib3.connectionpool: DEBUG: Starting new HTTP connection (1): 127.0.0.1:46767
> urllib3.connectionpool: DEBUG: http://127.0.0.1:46767 "POST /session HTTP/1.1" 200 888
> selenium.webdriver.remote.remote_connection: DEBUG: Finished Request
> selenium.webdriver.remote.remote_connection: DEBUG: POST http://127.0.0.1:46767/session/2fb50dec4326658d7e9dbc464c4b2cca/url {"url": "http://127.0.0.1/webapp/", "sessionId": "2fb50dec4326658d7e9dbc464c4b2cca"}
> urllib3.connectionpool: DEBUG: http://127.0.0.1:46767 "POST /session/2fb50dec4326658d7e9dbc464c4b2cca/url HTTP/1.1" 200 72
> selenium.webdriver.remote.remote_connection: DEBUG: Finished Request
> selenium.webdriver.remote.remote_connection: DEBUG: GET http://127.0.0.1:46767/session/2fb50dec4326658d7e9dbc464c4b2cca/title {"sessionId": "2fb50dec4326658d7e9dbc464c4b2cca"}
> urllib3.connectionpool: DEBUG: http://127.0.0.1:46767 "GET /session/2fb50dec4326658d7e9dbc464c4b2cca/title HTTP/1.1" 200 83
> selenium.webdriver.remote.remote_connection: DEBUG: Finished Request
> --------------------- >> end captured logging << ---------------------
> 
> ----------------------------------------------------------------------
> Ran 1 test in 3.034s
> 
> FAILED (errors=1)

The problem is here:

>     def find_element_by_(self, type, name):
>         try:
>             find_element_by_ = getattr(self.driver, 'find_element_by_%s', type)
>             return find_element_by_(name)

As far I understand 'find_element_by_' should be expanded by 'name' and
if I change this to

>             find_element_by_ = getattr(self.driver, 'find_element_by_' + type)

this is working for 'username' and 'password' but not later for
preparing and sending an mail.

> ======================================================================
> ERROR: test_login (test_webapp.TestWebApp)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File "/tmp/autopkgtest.amx76m/build.wWZ/src/debian/tests/test_webapp.py", line 68, in test_login
>     element = WebDriverWait(self.driver, 40).until(lambda self: self.find_element_by_("class_name", "icon_createEmailMessage"))
>   File "/usr/lib/python2.7/dist-packages/selenium/webdriver/support/wait.py", line 71, in until
>     value = method(self._driver)
>   File "/tmp/autopkgtest.amx76m/build.wWZ/src/debian/tests/test_webapp.py", line 68, in <lambda>
>     element = WebDriverWait(self.driver, 40).until(lambda self: self.find_element_by_("class_name", "icon_createEmailMessage"))
> AttributeError: 'WebDriver' object has no attribute 'find_element_by_'

Someone has some quick fix I can try? :-)

-- 
Regards
Carsten Schoenert



More information about the Pkg-giraffe-discuss mailing list