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>