2017-03-19 2 views
0

Ich versuche, meinen Zugang zu automatisieren und einige Verschrottung auf einer französischen Website. (http://espaceclientcanal.canal-plus.com/aide/pid792-s-inscrire-sur-l-espace-client.html).webdriver fehler mit sso form

Ich habe einen gültigen Account, aber ich kann mich nicht mit Selen anmelden. Ich habe es geschafft Elemente mit XPath-Ausdrücken oder mit Code wie folgt zu greifen:

browser.findElement(webdriver.By.id('sso-email')).sendKeys('[email protected]'); 
//var emailField = browser.findElement(webdriver.By.xpath("//input[@id='sso-email']")) ; 

habe ich auch die folgende Funktion, um sicherzustellen, ein Element vorhanden ist:

function isElementPresent(driver, by){ 
    try{ 
     driver.findElement(by); 
     return true; 
    }catch(NoSuchElementException){ 
     return false; 
    } 
} 

Init meine WebDriver wie folgt aus:

var fs = require('fs'); 
var chromedriver = require('chromedriver'); 
var webdriver = require('selenium-webdriver'); 

var browser = new webdriver.Builder().usingServer().withCapabilities({ 'browserName': 'chrome' }).build(); 

Jedes Mal, wenn ich die folgende Fehlermeldung erhalten:

NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"*[id="sso-email"]"} (Session info: chrome=56.0.2924.87) (Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 10.0.14393 x86_64)

Ich bin zuversichtlich, auf meinem XPath-Ausdruck (vielleicht bin ich falsch) ...

Ich verstehe nicht, was der Fehler ist.

Das Anmeldeformular scheint als Komponente generiert zu werden (ein Fortschrittsrad wird zuerst angezeigt); wäre es möglich, dass dies speziell dafür gedacht ist, automatisierungsskripte zu verhindern?

Antwort

0

Ihr Selencode sieht gut, aber unvollständig aus.

Das Anmeldeformular befindet sich in einem iframe mit name="pass_iframe".

Bevor Sie also die E-Mail- und Passwortfelder finden, müssen Sie den Iframe von der Seite abrufen, zu ihm wechseln, die Login-Elemente identifizieren und die Anmeldung durchführen und dann zur Hauptseite zurückkehren.

var iframe = driver.findElements(webdriver.By.xpath('iframe[name='pass_iframe']')); 
driver.switchTo().frame(iframe); 
//find the login elements 
//do the login 
driver.switchTo().defaultContent();