Я использую webdriver с java, и я хочу проверить кнопки, которые копируют контент из другого текстового поля. Я создал метод для возврата содержимого буфера обмена:
private String getClipboardContents() throws Exception {
java.awt.datatransfer.Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable contents=clipboard.getContents(null);
boolean hasTransferableText=(contents != null) && contents.isDataFlavorSupported(DataFlavor.stringFlavor);
if (hasTransferableText) {
return (String)contents.getTransferData(DataFlavor.stringFlavor);
}
else {
return null;
}
}
Который, я считаю, прекрасно работает. Когда я копирую содержимое в переменную и после этого значения изменения текстового поля, нажмите кнопку еще раз, чтобы скопировать содержимое из буфера обмена. Я получаю одинаковое содержимое буфера обмена из getClipboardContents(). Я не знаю, почему контент не обновляется и остается неизменным, я даже попытался очистить буфер обмена в середине первого и второго нажатия кнопки, но я получил нулевое значение для второго контента.
Фрагмент моего теста:
@Test
public void checkClipboardForCopy() {
String cFirstContent = null;
String cSecondContent = null;
IIDG idGenTab = goToIdG();
idGT.getRadioButton().click();
idGT.getButton().click();
browser.wait.until(loadingMarkerGone());
browser.findElement(By.id("IDClip")).click();
try {
cFirstContent = getClipboardContents();
} catch (Exception e) {
e.printStackTrace();
}
String firstValue = idGT.getNewId().getAttribute("value") ;
verifyThat("Value of clipboard", cFirstContent, not(isEmptyOrNullString()));
verifyThat("Value of id", idGT.getNewId().getAttribute("value"), not(isEmptyOrNullString()));
verifyThat("Compare value of first clipboard content to attribute value", cFirstContent, equalTo(idGT.getNewId().getAttribute("value")));
// clearClipboardContent();
idGT.getButton().click();
browser.wait.until(loadingMarkerGone());
browser.findElement(By.id("IDClip")).click();
try {
cSecondContent = getClipboardContents();
} catch (Exception e) {
e.printStackTrace();
}
String secondValue = idGT.getNewId().getAttribute("value") ;
verifyThat("Value of clipboard", cSecondContent, not(isEmptyOrNullString()));
verifyThat("Value of id", idGT.getNewId().getAttribute("value"), not(isEmptyOrNullString()));
verifyThat("Compare value of second clipboard content to attribute value", cSecondContent, equalTo(idGT.getNewId().getAttribute("value")));
verifyThat("Compare value of first and second clipboard contents", cSecondContent, greaterThan(cFirstContent));
}
В конце код не был проблемой, а временем. Я не знаю, почему это сработало для первого нажатия кнопки, чтобы скопировать содержимое буфера обмена, а для второго - нет. Я добавил простой сон сразу после нажатия на событие кнопки, и теперь он отлично работает, например:
@Test
public void checkClipboardForCopy() {
String cFirstContent = null;
String cSecondContent = null;
IIDG idGenTab = goToIdG();
idGT.getRadioButton().click();
idGT.getButton().click();
browser.wait.until(loadingMarkerGone());
browser.findElement(By.id("IDClip")).click();
try {
Thread.sleep(1000);
} catch (InterruptedException interrupt) {
}
try {
cFirstContent = getClipboardContents();
} catch (Exception e) {
e.printStackTrace();
}
String firstValue = idGT.getNewId().getAttribute("value") ;
verifyThat("Value of clipboard", cFirstContent, not(isEmptyOrNullString()));
verifyThat("Value of id", idGT.getNewId().getAttribute("value"), not(isEmptyOrNullString()));
verifyThat("Compare value of first clipboard content to attribute value", cFirstContent, equalTo(idGT.getNewId().getAttribute("value")));
idGT.getButton().click();
browser.wait.until(loadingMarkerGone());
browser.findElement(By.id("IDClip")).click();
try {
Thread.sleep(1000);
} catch (InterruptedException interrupt) {
}
try {
cSecondContent = getClipboardContents();
} catch (Exception e) {
e.printStackTrace();
}
String secondValue = idGT.getNewId().getAttribute("value") ;
verifyThat("Value of clipboard", cSecondContent, not(isEmptyOrNullString()));
verifyThat("Value of id", idGT.getNewId().getAttribute("value"), not(isEmptyOrNullString()));
verifyThat("Compare value of second clipboard content to attribute value", cSecondContent, equalTo(idGT.getNewId().getAttribute("value")));
verifyThat("Compare value of first and second clipboard contents", cSecondContent, greaterThan(cFirstContent));
}