2011-01-05 3 views
4

Я пытаюсь автоматизировать взаимодействие с веб-сайтом, который генерирует документы с использованием приложения типа MIME/vnd.wap.xhtml + xml. Я использую Selenium 2, WebDriver и FirefoxProfile.Selenium 2 WebDriver для использования пользовательского профиля

Поскольку Firefox не обрабатывает вышеупомянутый тип MIME, мне нужно запустить Firefox с расширением мобильного профиля XHTML (https://addons.mozilla.org/en-US/firefox/addon/1345/).

После создания профиля FireFox - я назвал его «selenium» и установил расширение Mobile Profile, я попытался использовать фрагменты кода в разделе «Советы и рекомендации» документа «Selenium 2.0 и WebDriver» (http : //seleniumhq.org/docs/09_webdriver.html#htmlunit-driver).

Подход № 1 выглядит следующим образом:

ProfilesIni allProfiles = new ProfilesIni(); 
FirefoxProfile profile = allProfiles.getProfile("selenium"); 
profile.setPreference("general.useragent.override", "User Agent string to force application/vnd.wap.xhtml+xml content.."); 
FirefoxDriver driver = new FirefoxDriver(profile); 
driver.get("http://www.mobilesite.com/"); 
WebElement element = driver.findElement(By.tagName("body")); 

подход # 2 выглядит следующим образом:

File profileDir = new File("/path/to/custom/profile/with/extension/ffprofile"); 
FirefoxProfile profile = new FirefoxProfile(profileDir); 
profile.setPreference("general.useragent.override", "same user agent string as above"); 
FirefoxDriver driver = new FirefoxDriver(profile); 
driver.get("http://www.mobilesite.com/"); 

Независимо от того, что фрагмент кода я использую экземпляр браузера, который запускается всегда не в состоянии обрабатывать сгенерированный контент; браузер запрашивает у меня действие, чтобы принять содержимое непризнанного типа MIME, как если бы расширение было неправильно настроено.

Любые идеи о том, что я могу делать неправильно?

Спасибо заранее,

Редактировать: Link to Selenium users group post.

+0

Возможно, вам лучше спросить форум поддержки селена? –

+5

Я обязательно это сделаю. Спасибо за предложение. Сообщество StackOverflow настолько впечатляет, что оно стало моей первой остановкой для абсолютно всех вопросов ... :) – Ytsejammer

+0

Вы смогли проверить, что надстройка загружается firefox, когда Selenium запускает ее? (Например, убедитесь, что тест не закрывает браузер, который он запускает, а затем видит, появляется ли надстройка в окне надстроек. Если это не так, я могу попробовать пару вещей: профайл другого, кроме Selenium (в случае, если Selenium вызывает собственный профиль по умолчанию, который он создает), или попробуйте использовать эквивалент Java для метода add_extension, который привязывает Ruby к профилю Firefox, чтобы автоматически загрузить расширение в профиль Selenium. –

ответ

1

Попробуйте начать с пустым профилем и добавлять расширения/конфигурацию во время выполнения:

public WebDriver getDriver() { 
    FirefoxProfile profile = new FirefoxProfile(); 

    // add any custom firefox configurations... 
    profile.setPreference("general.useragent.override", "some UA string"); 
    profile.setPreference("javascript.options.showInConsole", true); 
    profile.setPreference("dom.max_script_run_time", 0); 

    // might have to uninstall, search for *.xpi, then reinstall, then search 
    // again and compare to find the location on your system 
    // ...you should probably copy this into your selenium resources directory! 
    File modifyHeadersXpi = new File("/home/joecoder/.mozilla/firefox/dll8peh9.default/extensions/{b749fc7c-e949-447f-926c-3f4eed6accfe}.xpi"); 
    if (modifyHeadersXpi.exists()) { 
     try { 
      profile.addExtension(modifyHeadersXpi); 
      profile.setPreference("modifyheaders.config.active", true); 
      profile.setPreference("modifyheaders.config.openNewTab", true); 
      profile.setPreference("modifyheaders.config.migrated", true); 
      profile.setPreference("modifyheaders.autocomplete.name.defaults", 
        "[\"Accept\",\"Cache-Control\",\"Cookie\",\"Content-Length\",\"Content-Type\",\"Date\",\"Host\",\"Pragma\",\"Referer\",\"User-Agent\",\"Via\",\"X-Requested-With\",\"X-Forwarded-For\",\"X-Do-Not-Track\"]"); 
     } 
     catch (IOException e) { /* uh oh */ } 
    } 
    return new FirefoxDriver(profile); 
} 
1

Надежда это поможет вам:

public class Wap { 

public static void main (String[] args) throws IOException{ 

FirefoxProfile profile = new FirefoxProfile(); 
String baseURL; 
profile.addExtension(new File("C:\\Users\\Pandu\\Desktop\\WAP\\modify_headers-0.7.1.1-fx.xpi")); 

profile.setPreference("modifyheaders.config.active", true); 
profile.setPreference("modifyheaders.config.alwaysOn", true); 
profile.setPreference("modifyheaders.headers.count", 2); 
profile.setPreference("modifyheaders.headers.action0", "Add"); 
profile.setPreference("modifyheaders.headers.name0", "X-Nokia-msisdn"); 
profile.setPreference("modifyheaders.headers.value0", "123456789"); 
profile.setPreference("modifyheaders.headers.enabled0", true); 
profile.setPreference("modifyheaders.headers.action1", "Add"); 
profile.setPreference("modifyheaders.headers.name1", "x-sec-pass"); 
profile.setPreference("modifyheaders.headers.value1", "sdp123"); 
profile.setPreference("modifyheaders.headers.enabled1", true); 


    Logger Log = Logger.getLogger(WebDriver.class.getName()); 

    WebDriver driver = new FirefoxDriver(profile); 
    try{ 
driver.get("http://www.google.com"); 

     driver.findElement(By.linkText("Telugu")).click(); 
+0

Что такое действие для изменения заголовка? Вместо добавления чего-то вроде Modify или Delete? –

1

Вы должны убедиться, что вы добавить плагин для браузера, как DeploymentItem в вашем файле настроек. Некоторые примеры (в этом, мы добавили Firebug):

<Deployment> 
    <DeploymentItem filename="Selenium\[email protected]" /> 
    <DeploymentItem filename="packages\Castle.Core.3.1.0\lib\net40-client\Castle.Core.dll" /> 
    <DeploymentItem filename="Selenium\IEDriverServer.exe" /> 
    <DeploymentItem filename="Selenium\chromedriver.exe" /> 
    <DeploymentItem filename="Selenium\[email protected]" /> 
    </Deployment> 

Затем вам нужно будет создать профиль, который выглядит примерно так:

string firebugPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "", "[email protected]"); 

FirefoxProfile firebugProfile = new FirefoxProfile() {AcceptUntrustedCertificates = true}; 
firebugProfile.AddExtension(firebugPath); 
firebugProfile.SetPreference("extensions.firebug.currentVersion", "1.10.3"); 
firebugProfile.SetPreference("extensions.sce.bypass_domain_mismatch", true); 
firebugProfile.SetPreference("webdriver_assume_untrusted_issuer", false); 

Driver = new FirefoxDriver(firebugProfile); 
Driver.Manage().Window.Maximize(); 

Если вы добавите расширение с помощью AddExtension, его должны быть доступны в вашем селен-драйвере. Надеюсь, это поможет.