1# Copyright 2014 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import re 6 7# pylint: disable=W0401,W0614 8from telemetry.page.actions.all_page_actions import * 9from telemetry.page import page as page_module 10from telemetry.page import page_set as page_set_module 11 12 13def _CreateXpathFunction(xpath): 14 return ('document.evaluate("%s",' 15 'document,' 16 'null,' 17 'XPathResult.FIRST_ORDERED_NODE_TYPE,' 18 'null)' 19 '.singleNodeValue' % re.escape(xpath)) 20 21 22class GmailComposeDiscardPage(page_module.Page): 23 24 """ Why: Compose and discard a new email """ 25 26 def __init__(self, page_set): 27 super(GmailComposeDiscardPage, self).__init__( 28 url='https://mail.google.com/mail/', 29 page_set=page_set) 30 self.credentials_path = 'data/credentials.json' 31 self.credentials = 'google' 32 self.user_agent_type = 'desktop' 33 34 def RunNavigateSteps(self, action_runner): 35 action_runner.NavigateToPage(self) 36 action_runner.WaitForJavaScriptCondition( 37 'window.gmonkey !== undefined &&' 38 'document.getElementById("gb") !== null') 39 40 def ComposeClick(self, action_runner): 41 action_runner.ExecuteJavaScript(''' 42 var button=document.evaluate('//div[text()="COMPOSE"]', 43 document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null) 44 .singleNodeValue; 45 var mousedownevent=new MouseEvent('mousedown',true,true,window,0,0,0,0,0, 46 false,false,false,false,0,null); 47 var mouseupevent=new MouseEvent('mouseup',true,true,window,0,0,0,0,0, 48 false,false,false,false,0,null); 49 button.dispatchEvent(mousedownevent); 50 button.dispatchEvent(mouseupevent);''') 51 52 def RunEndure(self, action_runner): 53 action_runner.WaitForElement( 54 element_function=_CreateXpathFunction('//div[text()="COMPOSE"]')) 55 self.ComposeClick(action_runner) 56 action_runner.Wait(1) 57 action_runner.WaitForElement( 58 'div[class~="oh"][data-tooltip="Discard draft"]') 59 action_runner.ClickElement('div[class~="oh"][data-tooltip="Discard draft"]') 60 action_runner.Wait(1) 61 62 63class GmailComposeDiscardPageSet(page_set_module.PageSet): 64 65 """ 66 Description: Gmail endure test: compose and discard an email. 67 """ 68 69 def __init__(self): 70 super(GmailComposeDiscardPageSet, self).__init__( 71 credentials_path='data/credentials.json', 72 user_agent_type='desktop') 73 74 self.AddPage(GmailComposeDiscardPage(self)) 75