2016-04-01 12 views
1

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?

Antwort

1

Soweit ich weiß browser fingerprint Technologien erstellt, um zwischen Browsern zu unterscheiden, auch wenn Client cookies gelöscht und Sitzung neu gestartet. Also, was Sie hier beschrieben haben, wird erwartet.

Ich würde vorschlagen, Sie mit DesiredCapabilities, setzen einige zufällige Auflösung jedes Mal spielen, um starten Sie Browser zB:

driver.manage().window().setSize(new Dimension(1024, 768)) 

oder Firefox Profile:

DesiredCapabilities dc=DesiredCapabilities.firefox(); 
FirefoxProfile profile = new FirefoxProfile(); 
dc.setCapability(FirefoxDriver.PROFILE, profile); 
Webdriver driver = new FirefoxDriver(dc); 
+0

@Aristarhys, sorry für 'Java' Code in Beispiele –

+0

überhaupt kein Problem – Aristarhys

Verwandte Themen