2017-06-21 4 views
0

私はjUnit、geckodriver、Seleninumを使用してScientic AmericanのWebサイトで学習目的で一連のテストを行っています。geckodriverでサインインすると無効なCSRFトークンが返されるエラー

それぞれ対応バージョン: - jUnit 4.12; - Selenium Java 3.4.0; - geckodriver 0.17.0 win64; - Firefox 54.0 win64。

署名フォームのテストに問題があります。以下のテストを実行すると、ログインは失敗し、「ログイン:無効なCSRFトークン」というメッセージが表示されたページで終了します。

手でサインインするとすべて正常に機能します。

public class SeleniumTest { 
    private static WebDriver driver; 
    private WebElement element; 

    @BeforeClass 
    public static void openBrowser() { 
     String url = "https://www.scientificamerican.com/";  
     System.setProperty("webdriver.gecko.driver", "C:\\\\geckodriver-v0.17.0-win64\\geckodriver.exe");  
     DesiredCapabilities dc = DesiredCapabilities.firefox(); 
     dc.setCapability("marionette", true); 
     driver = new FirefoxDriver(dc); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS); 
     driver.get(url); 
    } 

    @Test 
    public void testSignIn() { 
     driver.findElement(By.id("signin-click")).click(); 
     WebDriverWait wait = new WebDriverWait(driver, 15); 
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.className("signin-flyout__form__submit")))); 

     element = driver.findElement(By.id("emailAddress1")); 
     element.click(); 
     element.clear(); 
     element.sendKeys("[email protected]"); 

     element = driver.findElement(By.id("password1")); 
     element.click(); 
     element.clear(); 
     element.sendKeys("123123123"); 

     driver.findElement(By.className("signin-flyout__form__submit")).click();   wait.until(ExpectedConditions.presenceOfElementLocated(By.className("account-tooltip__title"))); 
     element = driver.findElement(By.className("account-tooltip__title")); 
    } 
} 

そして、これは形式の署名のコードです:

これは私のテストクラスである

<form class="signin-flyout__form" action="https://www.scientificamerican.com/my-account/login/?s=1" method="post"> 
    <input name="slatAction" value="public:account.login" type="hidden"> 
    <input name="flyoutlogin" value="true" type="hidden"> 
    <input name="csrf_token" value="EF076BBB82FB3698878C9DCA0DBA5B1B" type="hidden"> 
    <input name="csrf_token_expires" value="170620234403162" type="hidden"> 
    <label class="signin-flyout__form__label" for="emailAddress1">Email:</label> 
    <input id="emailAddress1" class="signin-flyout__form__input" name="emailAddress" data-signin-email="" type="textbox"> 
    <label class="signin-flyout__form__label" for="password1">Password:</label> 
    <input id="password1" class="signin-flyout__form__input" name="password" data-signin-password="" type="password"> 
    <a class="signin-flyout__form__forgot" href="https://www.scientificamerican.com/my-account/forgot-password/">Forgot password?</a> 
    <button class="btn btn--small btn--inverted signin-flyout__form__submit" type="submit" data-signin-submit-btn="">Login</button> 
    <img class="signin-flyout__form__loading" src="/public/resources/loader-824962d9e67c8497c9ef428a9fdfad71.gif" alt="Loading" data-signin-loading=""> 
</form> 

答えて

0

こんにちは、次のコードを試してみてください。それは私のために働いた

driver.findElement(By.id("emailAddress1")).clear(); 
    driver.findElement(By.id("emailAddress1")).sendKeys("[email protected]"); 
    driver.findElement(By.id("password1")).clear(); 
    driver.findElement(By.id("password1")).sendKeys("123123123"); 
    Thread.sleep(2000); 
    driver.findElement(By.className("signin-flyout__form__submit")).click(); 
関連する問題