Добрый день! Столкнулся с такой проблемой:
Тест в котором был метод нажатие на чекбокс:
public void searchValueAndClickCheckBox(List<WebElement> list, String search, String checkBoxXPath, String textXPath){
for (WebElement tr: list){
WebElement checkBox = tr.findElement(By.xpath(checkBoxXPath));
WebElement text = tr.findElement(By.xpath(textXPath));
if (text.getText().equals(search)){
checkBox.click();
break;
}
}
}
Работал, до того момента, пока я не добавил:
DesiredCapabilities dc = DesiredCapabilities.internetExplorer();
dc.setCapability("nativeEvents", false);
После этого, при прохождение теста, когда драйвер нажимает на чекбокс - галочка появляется, но в поле не появляется значение которое отмечено. При этом, когда делаешь нажатие руками - все работает.
То как работает на тесте:
Тест проходит на Windows Server, IE8 - связка очень тупит.
При вводе текста иногда бывает, например так:
sendKeys(“Какой-то текст”) а в строку он может ввести “Ка кой -тоте кст” или как-то еще рандомно.
name = "Vasiliy Pupkin"
input_name_xpath = "//*[@id="name_input"]"
def type_with_pause(input_text, edit):
"""
***input_text - строка которую вводим в Эдит
***edit- референс на объект нужного нам Эдита
"""
currently_put_text = u""
for c in input_text:
edit.sendKeys(c)
time.sleep(1)
# можно добавить assert и валиться, если ожидаемая информация искажается
# currently_put_text += c
# assert currently_put_text == edit.text
type_with_pause(name, input_name_xpath)
Я бы не рекомендовал так делать, т.к. перезаписывать и делать проверки можно очень долго, и если какой-то валидатор на JS так скверно себя ведет, то лучше не отходя от кассы понаблюдать за его поведением, почитать его код в Консоли браузера, чтобы понять, как он работает. На крайний случай - написать разработчикам фронтенда тикет. Вслепую гадать и пытаться понять - не лучший вариант. Но если все же хотите - написать такой метод - можно
В этом случае вместо assert блока будет if блок на проверку currently_put_text == edit.text
и в случае неравенства - очистка эдит бокса и рекурсивный вызов этой же самой функции.