Ich verwende https://github.com/Valve/fingerprintjs2, um eindeutige IDs für anonyme Besucher zu erstellen.Fingerprinting-Problem mit parallelen Selen-Tests
Problem ist ich mehrere Benutzer-Sessions gleichzeitig simulieren wollen, also bin ich Tests laufen auf diese Weise
nosetests --processes=8 --process-timeout=120
auch mit zwei Knoten für realistischere Testansatz Selen Raster ich verwende - ein mit mehreren Firefox-Instanzen und einem anderen mit Chrome-Instanzen.
@classmethod
def setUpClass(cls):
cls.sessions_ids = set([])
def setUp(self):
self.driver = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities={
"browserName": "firefox", #chrome
"platform": "ANY",
}
)
self.driver.set_page_load_timeout(30)
def test_anon_session(self):
self.driver.get("http://localhost:8000/")
wait = WebDriverWait(self.driver, 10)
wait.until(
lambda driver: self.driver.execute_script(
"return jQuery.active == 0"
)
)
sessionId = # getting sessionId (fingerprint2 js result)
self.sessions_ids.add(sessionId)
def test_anon_session_other_page(self):
self.driver.get("http://localhost:8000/delivery")
...
@classmethod
def tearDownClass(cls):
# 2 is a tests_count
assert len(cls.sessions_ids) == 2, "Non unique sessions %r" % cls.sessions_ids
Problem ist - auch WebDriver jeder Test neuen Browser öffnet - es denselben Fingerabdruck
Non unique sessions firefox set([u'c0509e372ee0906cb0120edd5b349620'])
Auch wenn ich User-Agent-String ändern
def test_delivery_page_different_user_agent(self):
profile = FirefoxProfile()
profile.set_preference("general.useragent.override", "CatchBot/2.0; +http://www.catchbot.com")
driver = Remote(
command_executor='http://localhost:4444/wd/hub',
desired_capabilities={
"browserName": "chrome",
"platform": "ANY",
},
browser_profile=profile,
)
driver.set_page_load_timeout(30)
driver.get("http://localhost:8000/delivery")
...
Fingerabdruck unterscheidet sich nur für unterschiedliche Rückkehr Browser, aber keine Testfälle oder Tests.
Gibt es eine Möglichkeit, die webdriver-instanz im Hinblick auf Browser-Fingerprints einzigartig zu machen?
@Aristarhys, sorry für 'Java' Code in Beispiele –
überhaupt kein Problem – Aristarhys