7

Ambiente: Mac OS X 10.8.3, Ruby 2.0.0p0, selenium-webdriver 2.32.1, ChromeDriver 26.0.1383.0.Profilo personalizzato per Chrome

Desidero modificare la lingua predefinita del browser. Sto testando se il sito rileva correttamente la lingua del browser e visualizza le pagine nella lingua.

sono stato in grado di impostare la lingua tedesca Firefox:

require "selenium-webdriver" 

profile = Selenium::WebDriver::Firefox::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.firefox(firefox_profile: profile) 
caps.platform = "Linux" 
caps.version = 20 

driver = Selenium::WebDriver.for( 
:remote, 
url: "http://USERNAME:[email protected]:80/wd/hub", 
desired_capabilities: caps) 

driver.navigate.to "http://sandbox.translatewiki.net/" 

voglio fare lo stesso utilizzando Chrome (e altri browser, se possibile).

Ho provato diverse cose cercando di aprire la pagina in tedesco in Chrome, ma ogni volta che la pagina viene visualizzata in inglese, anziché in tedesco.

require "selenium-webdriver" 

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.chrome(firefox_profile: profile) 
caps.platform = "Linux" 
caps.version = "" 

driver = Selenium::WebDriver.for( 
:remote, 
url: "http://USERNAME:[email protected]:80/wd/hub", 
desired_capabilities: caps) 

driver.navigate.to "http://sandbox.translatewiki.net/" 

Se cambio firefox_profile: profile-profile: profile o chrome_profile: profile, la pagina si apre in inglese (invece che in tedesco) ogni volta.

Per quanto posso vedere nello API docs, è supportato solo :firefox_profile.

Sono stato in grado di farlo su un local machine, ma non quando si utilizza Sauce Labs.

+0

Quindi, se si passa: firefox_profile a Chrome cap, funziona o no? – p0deje

+0

@ p0deje: non funziona. Cosa mai fare, Chrome apre sempre la pagina in inglese, invece in tedesco. –

+1

Sei sicuro che se imposti la lingua predefinita nel tuo browser la pagina si carica correttamente? – fotanus

risposta

3

questo dovrebbe funzionare:

require "selenium-webdriver" 

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    platform: "Linux", 
    version: "", 
    'chrome.profile' => profile.as_json['zip'] 
) 

Selenium::WebDriver.for(:remote, 
    url: "http://[email protected]:80/wd/hub", 
    desired_capabilities: caps 
) 
+0

Sapevo che Jari è l'unico che può rispondere a questa domanda! – p0deje

+0

Il meglio speso 500 reputazione in assoluto. :) –

+0

È stato verificato che funzioni? Sembra così vicino alla mia soluzione proposta che mi sorprenderebbe se uno lavorasse e l'altro non lo facesse. –

0

sto vedendo la traduzione tedesca sulla mia macchina locale utilizzando:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 
@driver = Selenium::WebDriver.for :chrome, :profile => profile 
@target = 'http://sandbox.translatewiki.net/' 

osx: 10.7.5

rubino 1.9.3p0 (2011-10-30 revisione 33570) [x86_64-darwin11. 4.2]

+0

Ricco, come dice l'ultima frase nella mia domanda, sono in grado di farlo su una macchina locale (si noti il ​​collegamento al post del mio blog), ma non quando si utilizza Sauce Labs. –

+1

Ottiene l'opzione "chrome non riconosciuta: profile' quando faccio questo ... –

1

Wow, la documentazione di SauceLabs + Chrome + Selenium + Ruby è molto incoerente e talvolta contraddittoria. Purtroppo non ho un account SauceLabs da testare, quindi tutto ciò che posso fare è darti dei suggerimenti.

This documentation indica che è un problema noto che ChromeDriver non supporta un profilo personalizzato. This post mostra come impostare un profilo personalizzato per Chrome. Vai a capire.

L'impostazione di un profilo o di una lingua predefinita non fa parte dello standard WebDriver wire protocol in modo che si possa essere sfortunati.

Una soluzione alternativa sarebbe impostare il browser in modo che utilizzi un proxy e nel proxy aggiungere/sostituire l'intestazione Accept-Language nel proxy.

Eppure, guardando attraverso il codice Selenio Ruby, sembra che il post potrebbe essere a qualcosa, in modo da dare una prova:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile["intl.accept_languages"] = "de" 

caps = Selenium::WebDriver::Remote::Capabilities.chrome 
caps['chromeOptions'] = { 'profile' => profile.as_json['zip'] } 
driver = Selenium::WebDriver.for( 
:remote, 
url: "http://USERNAME:[email protected]:80/wd/hub", 
desired_capabilities: caps) 

driver.navigate.to "http://sandbox.translatewiki.net/" 

EDIT: Sembra che l'interruttore --lang- non fa quello che si voglio, quindi ignorare quanto segue. Lo lascio qui per i posteri.

Questo potrebbe funzionare (dimenticare il profilo, usare la linea di comando):

caps = Selenium::WebDriver::Remote::Capabilities.chrome 
caps['chrome.switches'] = ['--lang-de'] 
+0

Sauce Labs ha account gratuiti ... :) –

+0

Non sono riuscito a trovare l'opzione' --lang-de' su http: //src.chromium .org/svn/trunk/src/chrome/common/chrome_switches.cc Dove l'hai trovato? –

+0

Ho trovato lo switch '--lang' + codice paese [qui] (http://peter.sh/experiments/chromium-command-line-switches/) e [qui] (http://src.chromium.org /svn/trunk/src/ui/base/ui_base_switches.cc). Potrebbe non funzionare, ma è una possibilità. Hai provato a contattare SauceLabs a riguardo? Davvero dovrebbero avere una risposta per te. –

0

Per ora si può solo utilizzare questo metodo

def launch_browser options={} 

    language = options.fetch(:language, "en_US") 
    url = options.fetch(:url, "www.google.com") 

    prefs = { 
     :intl => { 
      :accept_languages => language 
     } 
    } 
    browser = Watir::Browser.new :chrome, :prefs => prefs 

    browser.goto url 
    end 

e quindi devi solo chiamare

launch_browser :language => "de" 
Problemi correlati