Webdriver: значения полей исчезают почти предсказуемо, вероятная проблема синхронизации
Отказ от ответственности: я относительно новичок в Java, Webdriver и HTML, и я вообще не знаю javascript ("кроме этого миссис Линкольн...) Области недостатка знаний и опыта должны стать очевидными в описании. Извините за длина, но руководящие принципы говорят быть конкретным и тщательным.
Наиболее близкая подобная ситуация здесь: Селен: данные, введенные в форму с несколькими вкладками, иногда исчезают. Но это не совсем то же самое, и это решение не помогло.
Сценарий: создайте автоматизацию тестирования способности приложения создавать новую учетную запись пользователя.
Основные шаги: войдите в систему, перейдите на страницу новой учетной записи пользователя, измените категорию acct на Residential, заполните необходимые поля, нажмите Submit, подтвердите, что учетная запись пользователя создана.
Проблема: работает до заполнения полей данных. Они все на одной странице. При запуске обязательные поля заполняются данными (я вижу, что данные появляются по мере их заполнения), но затем ряд начальных полей теряют свои данные, прежде чем перейти к шагу отправки. Иногда это первое поле, иногда первое и второе, иногда первые три заполненные и т. Д.
Я почти уверен, что это какая-то временная проблема. Это всегда первое заполненное поле, которое теряет данные. Я провел эксперимент, чтобы заполнить поля в обратном порядке (поменял местами цикл в коде). Снова это были первые поля, заполненные потерянными данными.
Кажется, что страница обновляется после того, как начинается заполнение, и это проблема. У меня есть явное ожидание загрузки страницы, и это всегда работает (решил не использовать неявное ожидание).
Дальнейшие исследования показывают, что это общая проблема. Мое лучшее предположение сейчас состоит в том, что все элементы визуализируются, а затем выполняется большое количество javascript и заставляет страницу обновляться после начала заполнения поля.
Я видел много вопросов о том, как определить, когда страница "готова", включая javascript, но пока не нашел надежного решения.
Другая информация: приложение работает на force.com. Я только попробовал это с Firefox до сих пор. Я не знаю, поможет ли код, но я все равно включил соответствующие биты.
Поля xPath и значения находятся в массивах fieldLoc и fieldText.
Любые мысли или советы приветствуются.
// change Category to Residential, i.e. value=100
WebElement dropDownListBox = wd.findElementByXPath(xpCategory);
Select clickThis = new Select(dropDownListBox);
clickThis.selectByValue(tCategory);
// wait for the page to refresh by looking for several elements Footer
new WebDriverWait(wd, wSecPage).until(
ExpectedConditions.textToBePresentInElementLocated(By.xpath(xpFooter),
tFooter));
new WebDriverWait(wd, wSecPage).until(
ExpectedConditions.elementToBeClickable(By.xpath(xpCancel)));
for (int i = 0; i < len; i++) {
// select value appropriately if a dropdownbox (location ends with "select")
if (fieldLoc[i].endsWith("select")) {
dropDownListBox = wd.findElementByXPath(fieldLoc[i]);
clickThis = new Select(dropDownListBox);
clickThis.selectByValue(fieldText[i]);
} else {
// otherwise send text value to text box
wd.findElementByXPath(fieldLoc[i]).sendKeys(fieldText[i]);
}
}
// tab out of last field in order for Submit to enable
wd.findElementByXPath(fieldLoc[len-1]).sendKeys(Keys.TAB);
// click Submit
wd.findElementByXPath(xpSubmit).click();