У меня не получилось автоматизировать простой селект(хотя это типо не селект), (см скрин Clip2Net — screen capture tool for Windows, Android, iPad, Mac, Linux ).
Вот так выглядит html:
<table id="SaveModel.Sections_ddListBox" class="dxeButtonEditSys dxeButtonEdit_Metropolis s-textbox dxeReadOnly_Metropolis " style="width:210px;">
<tbody>
<tr>
<td class="dxic" style="width:100%;" onmousedown="return aspxDDDropDown('SaveModel.Sections_ddListBox', event)">
<input id="SaveModel.Sections_ddListBox_I" class="dxeEditArea_Metropolis dxeEditAreaSys " type="text" onchange="aspxETextChanged('SaveModel.Sections_ddListBox')" onblur="aspxELostFocus('SaveModel.Sections_ddListBox')" onfocus="aspxEGotFocus('SaveModel.Sections_ddListBox')" readonly="readonly" name="SaveModel.Sections_ddListBox" autocomplete="off">
</td>
<td id="SaveModel.Sections_ddListBox_B-1" class="dxeButton dxeButtonEditButton_Metropolis" style="-moz-user-select:none;" onmousedown="return aspxDDDropDown('SaveModel.Sections_ddListBox', event)">
<img id="SaveModel.Sections_ddListBox_B-1Img" class="dxEditors_edtDropDown_Metropolis" alt="v" src="/DXR.axd?r=1_15-ErVie">
</td>
</tr>
</tbody>
</table>
Как я понял стандартный метод для работы с селелектом, который есть в селениуме, здесь не поможет и решил всё обмазать кликами, к тому же так будет честнее, ведь пользователи делают именно так.
Вот написал простенький метод, ну типо я всегда буду выбирать только два пункта:
protected void selectWithCheckbox(By locator1, By locator2, By locator3) {
click(locator1); // Кликнул на сам список
explicitWait(locator2); //Он раскрылся, выбрал один элемент выбрал второй
click(locator2);
explicitWait(locator3);
click(locator3);
}
И если этот единственный в списке действий или последний шаг, то всё норм, но если после него еще что то есть, например поле для ввода телефона надо заполнить, то падает ошибка:
org.openqa.selenium.WebDriverException:
unknown error: Element <input class="dxeEditArea_Metropolis dxeEditAreaSys " onkeyup="aspxEKeyUp('SaveModel.Phone', event)" id="SaveModel.Phone_I"
onchange="aspxEValueChanged('SaveModel.Phone')" onblur="aspxELostFocus('SaveModel.Phone')"
name="SaveModel.Phone" onfocus="aspxEGotFocus('SaveModel.Phone')"
type="text" onkeypress="aspxEKeyPress('SaveModel.Phone', event)"
onkeydown="aspxEKeyDown('SaveModel.Phone', event)" autocomplete="off"> is not clickable at point (641, 925).
Other element would receive the click: <div class="layout-ajax-locker">...</div>
(Session info: chrome=60.0.3112.113)
(Driver info: chromedriver=2.32.498550
(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:42:44.417Z'
System info: host: 'C423POP', ip: '169.254.192.90', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_91'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{mobileEmulationEnabled=false, hasTouchScreen=false, platform=XP,
acceptSslCerts=true, webStorageEnabled=true, browserName=chrome,
takesScreenshot=true, javascriptEnabled=true, platformName=XP, setWindowRect=true,
unexpectedAlertBehaviour=, applicationCacheEnabled=false, rotatable=false,
networkConnectionEnabled=false, chrome={chromedriverVersion=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),
userDataDir=C:\Users\popkov\AppData\Local\Temp\scoped_dir2908_5142},
takesHeapSnapshot=true, pageLoadStrategy=normal, unhandledPromptBehavior=,
databaseEnabled=false, handlesAlerts=true, version=60.0.3112.113, browserConnectionEnabled=false,
nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true}]
Которая указывает что проблема именно в строчке следующего действия и там якобы не кликабельная точка
Я добавил в метод со списком еще строчку что бы закрыть его повторным нажатием на то место которым открывал, но всё ровно таже ошибка, только проблема теперь в новой строчке
Версии ОС и софта следующие:
Java
Selenium 3,5
Testng
Тестирую сразу на хроме
Уважаемы коллеги помогите разобраться с этой надоедливой проблемой, автотестами решил заняться недавно, не ожидал что встречу затык в таком месте. Как говорил у меня опыта мало и возможно то что я сделал сплошное дилетантство, подскажите тогда, как лучше такое автоматизировать?