我有一個網頁。當我首先打開該網頁時,它會要求進行服務器身份驗證。提供服務器身份驗證後,它允許我瀏覽網站。 我必須自動化該網頁,但由於服務器身份驗證,我無法前進。 我該如何處理在蓋布本服務器身份驗證或Web驅動如何使用Geb/WebDriver處理服務器認證
2
A
回答
3
嘗試使用這樣的: http://username:[email protected]/page
相反的: http://site.com/page
0
0
我不能用這個,因爲我在@我的用戶名(是的,Microsoft帳戶) 。這就是爲什麼我決定採用代理解決方案來攔截我的請求並插入準備好的授權標頭。我想直接在測試中使用代理,因此它是完全自動化的。現在生成的代碼是相當粗糙的,基於Browser.drive
而不是藝術蓋布代碼的狀態,但我相信,如果你知道蓋布,你可以很容易地適應它:
import geb.Browser
import geb.Configuration
import io.netty.handler.codec.http.DefaultHttpRequest
import io.netty.handler.codec.http.HttpObject
import io.netty.handler.codec.http.HttpRequest
import io.netty.handler.codec.http.HttpResponse
import org.littleshoot.proxy.HttpFilters
import org.littleshoot.proxy.HttpFiltersAdapter
import org.littleshoot.proxy.HttpFiltersSourceAdapter
import org.littleshoot.proxy.HttpProxyServer
import org.littleshoot.proxy.impl.DefaultHttpProxyServer
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.firefox.FirefoxProfile
def baseUrl = System.getProperty("baseUrl", "http://localhost/app/")
// LittleProxy setup
def proxyPort = 8181
HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
.withPort(proxyPort)
.withFiltersSource(
new HttpFiltersSourceAdapter() {
@Override
HttpFilters filterRequest(HttpRequest originalRequest) {
return new HttpFiltersAdapter(originalRequest) {
@Override
HttpResponse requestPre(HttpObject httpObject) {
if (httpObject instanceof DefaultHttpRequest) {
if (httpObject.getUri().startsWith(baseUrl)) {
if (httpObject.headers().contains("Authorization")) {
println "Already contains the Authorization header: " + httpObject.getUri()
} else {
println "Adding Authorization header to request: " + httpObject.getUri()
httpObject.headers().add("Authorization", "Basic " + System.getProperty("basicAuth"))
}
} else {
println "Ignoring request: " + httpObject.getUri()
}
} else {
println "Ignoring event: " + httpObject
}
return null
}
}
}
})
.start();
println "Base URL: " + baseUrl
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.proxy.http", "localhost");
profile.setPreference("network.proxy.http_port", proxyPort);
// to force proxy for localhost or 127.0.0.1 too
profile.setPreference("network.proxy.no_proxies_on", "");
// http://kb.mozillazine.org/Network.proxy.type
// 1 = manual proxy configuration; default 5 would use system settings
profile.setPreference("network.proxy.type", 1);
profile.setPreference("browser.fixup.alternate.enabled", false);
def configuration = new Configuration()
def driver = new FirefoxDriver(profile)
configuration.setDriver(driver)
Browser.drive(configuration, {
go baseUrl
def navigator = $("#app-title")
assert navigator.getAttribute("title") == "App title"
})
driver.close()
server.stop()
首先,它開始代理 - 基於https://github.com/adamfisk/LittleProxy
然後它爲代理設置Firefox配置文件。某些設置與localhost
的使用有關,但如果您使用任何其他主機名,則它不會受到傷害。
最後我們開始測試,將配置提供給drive(...)
調用。
我還沒有得到更多的經驗與小代理,它是如何穩定等,但對於這種簡單的情況下,它工作得很好。攔截只有baseUrl
的請求非常重要,因爲Firefox可能會調用Google搜索實例 - 並且您不希望在那裏發送授權哈希(因爲它很容易反轉)。這也是爲什麼我在JVM參數中提供它:-DbaseUrl=http://localhost/finrisk -DbasicAuth=xxx...allTheWayToEqualSing=
很顯然,它現在適用於Firefox,但我想如果可以設置其代理設置,它應該可以適用於其他瀏覽器。
相關問題
- 1. 如何使Ember控制器處理服務器驗證錯誤?
- 2. 服務器認證
- 3. JAX-RS REST服務如何通過註釋處理認證?
- 4. CakePHP的REST Web服務和認證,如何處理
- 5. 春季認證服務提供商VS認證處理過濾器
- 6. nginx代理服務器認證攔截
- 7. 使用httplib2處理身份驗證和代理服務器
- 8. 使用LDAP的CAS服務器認證
- 9. OAuth2.0服務器到服務器認證
- 10. 如何在處理電子郵件服務器時處理代理服務器?
- 11. 如何使用ui路由器保護/處理認證路線?
- 12. netty-socketio服務器,如何處理socket.io客戶端認證請求?
- 13. 如何使用Passport JS認證用戶服務器端?
- 14. 如何使用LWP :: Simple處理代理服務器?
- 15. 如何使用Socket.IO與服務器要求認證
- 16. smtp服務器認證
- 17. 認證測試服務器
- 18. Kibana服務器認證
- 19. http服務器認證
- 20. 認證服務器通知
- 21. FB認證服務器端
- 22. GCM XMPP服務器認證
- 23. CoovaChilli&FREERADIUS:Apache服務器認證
- 24. 網絡服務器認證
- 25. SQL服務器認證
- 26. 使用Ember Data處理服務器端驗證
- 27. 使用Ajax窗體和ASP.Net處理服務器端驗證MVC
- 28. 使用服務器端身份驗證處理Backbone.model.destroy
- 29. 如何處理Express和Node中的服務器端驗證?
- 30. 如何處理生產中的SSL服務器證書?