Я использую Selenium WebDriver для автоматизации системы. Язык - Java. Я сделал большинство вещей, но застрял в одном месте. Мне нужно отправить форму, содержащую поля имени пользователя, пароля и повторного ввода пароля. Но когда я заполняю их (используя селен) и нажимаю кнопку «Создать учетную запись», это не сработало.
Here is the code,
System.setProperty("webdriver.chrome.driver", "./ChromeDriver/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("URL Here");
WebElement element9 = driver.findElement(By.id("accountname"));
element9.sendKeys(username);
WebElement element10 = driver.findElement(By.id("password"));
element10.sendKeys(password);
WebElement element12 = driver.findElement(By.id("reenter_password"));
element12.sendKeys(password);
I used these methods to submit the form. But none of them worked.
element12.sendKeys(Keys.ENTER); //method 1
WebElement element11 = driver.findElement(By.linkText("Complete Sign-up"));
element11.click(); //method 2
((JavascriptExecutor)driver).executeScript("javascript:CompleteCreateAccount();"); //method 3
WebElement element13 = driver.findElement(By.xpath("//a[@id='createAccountButton']/span"));
element13.click(); //method 4
element13.submit(); //method 5
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element13); //method 6
Form HTML got from Inspect Element,
<div class = "leftcol">
<div id = "error_display" style = "display: none;"></div>
<div class = "checkout_content_box" id = "cart_area">
<form id = "create_account" name = "create_account" action = "" onsubmit = "CompleteCreateAccount(); return false; " method = "POST">
<input type = "hidden" name = "lt" id = "lt" value = "0">
<div id = "account_form_box">
<div class = "join_form">
<div class = "form_row">
<div class = "form_area">
<label for = "accountname">Create a Steam account name</label>
<input type = "text" maxlength = "64" name = "accountname" id = "accountname" onchange = "CheckAccountNameAvailability();">
</div>
<div class = "form_notes">
<br>
<span class = "input_note"><a href = "javascript:CheckAccountNameAvailability();">Check availability</a></span>
<span id = "accountname_availability" style = "display: none;"></span>
</div>
<div style = "clear: left;"></div>
</div>
<div id = "form_row_choose_suggested_name" class = "form_row" style = "display: none;">
<div class = "form_area">
<label for = "choose_accountname">Available account names</label><br>
<select id = "choose_accountname" name = "choose_accountname" size = "3" onchange = "UpdateAccountName( this.value );">
<option id = "suggested_name_1"></option>
<option id = "suggested_name_2"></option>
<option id = "suggested_name_3"></option>
</select>
</div>
<div class = "form_notes">
<br>
<span class = "choose_accountname_description">Select one or try again with another name of your choice</span>
</div>
<div style = "clear: left;"></div>
</div>
<div class = "rule"></div>
<div class = "form_row">
<div class = "form_area">
<label for = "password">Choose a password</label>
<input type = "password" maxlength = "64" name = "password" id = "password" onkeyup = "CheckPasswordStrength()" autocomplete = "off">
</div>
<div class = "form_notes">
<div id = "password_tag" class = "password_tag"> </div>
</div>
<div style = "clear: left;"></div>
</div>
<div class = "form_row">
<div class = "form_area">
<label class = "reenter_row" for = "reenter_password">Re-enter password</label>
<input type = "password" maxlength = "64" name = "reenter_password" id = "reenter_password" onkeyup = "ReenterPasswordChange()" autocomplete = "off">
</div>
<div class = "form_notes">
<br>
<div id = "reenter_tag" class = "password_tag"> </div>
</div>
<div style = "clear: left;"></div>
</div>
<div class = "rule"></div>
<div class = "form_row">
<div id = "priv_and_sub">
<a id = "createAccountButton" class = "btnv6_blue_hoverfade btn_medium" href = "javascript:CompleteCreateAccount();" style = "float: right;">
<span>Complete Sign-up</span>
</a>
<div style = "clear: right;"></div>
</div>
<div id = "ssa_submit">
</div>
</div>
</div>
</div>
</form>
</div>
And also I need to say when I click
Create Account buttonmanually it is working. But using selenium It is not working and pass this messageThe account name you have chosen is not available. Please choose another name. The password you entered is not allowed. Please select a different password, with at least 8 characters.
But username and passwords are okay. Nothing wrong. Because when I click it manually It is working with that username and password.
@MosheSlavin Я добавил целые HTML-элементы. Вы можете проверить?
@BaruchG. Но я вижу, что в эти поля вводятся имя пользователя и пароли.




У меня были подобные проблемы в прошлом, иногда помогает сосредоточиться на другом элементе, а затем щелкнуть ...
Я бы начал с попытки фокус на <div id = "ssa_submit"></div>.
Обновлено:
Вы говорите, что вручную это работает, поэтому я вам посоветую использовать Action вот так:
Actions action = new Actions(driver);
WebElement btnElement=driver.findElement(By.xpath("//a[@id='createAccountButton']"));
action.doubleClick(btnElement).build().perform();
Но может быть, у вас действительно ошибка в системе ...
Обновлено еще раз:
Лучшая практика в Selenium - использовать WebDriverWait с ExpectedConditions:
WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.elementToBeClickable(By.id("createAccountButton")));
См. Ожидаемые условия и WebDriverWait.
Я думаю, это должно сработать!
Надеюсь, это тебе поможет.
Выдает ошибку Element <div id = "ssa_submit">...</div> is not clickable at point
Нет, сэр. Это тоже не работает. Но спасибо, что помогли мне.
Вы видели, как мышь двигается к кнопке и щелкает? и это все еще не помогло? это странно
@HansanaAthukorala, у тебя +1 от меня! это загадка! ;)
Я обновил последнюю часть вопроса. Вы можете это проверить?
Да, я тоже не могу понять, что происходит.
Вместо того, чтобы щелкнуть By.xpath("//a[@id='createAccountButton']/span") и отправить форму, щелкните поле имени пользователя, пароля или подтверждения пароля и нажмите ввод.
System.setProperty("webdriver.chrome.driver", "./ChromeDriver/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("URL Here");
WebElement element9 = driver.findElement(By.id("accountname"));
element9.sendKeys(username);
WebElement element10 = driver.findElement(By.id("password"));
element10.sendKeys(password);
WebElement element12 = driver.findElement(By.id("reenter_password"));
element12.sendKeys(password);
element12.click();
element12.submit();
Я уже исправил проблему. Но спасибо за ответ.
@MosheSlavin Я не знаю, что есть много элементов, я только что добавил только эти поля. Нужно ли мне добавлять целые элементы HTML-формы?