// because of auto updates...
browserIdentifier = getExpectedUserAgentString(
getDesiredCapabilities()) + "66";
+ } else if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
+ browserIdentifier = getExpectedUserAgentString(
+ getDesiredCapabilities()) + "58";
} else {
browserIdentifier = getExpectedUserAgentString(desiredCapabilities)
+ desiredCapabilities.getVersion();
public void testContextClick() {
openTestURL();
- new Actions(getDriver())
- .moveToElement($(UIElement.class).first(), 10, 10)
+ final UIElement uiElement = $(UIElement.class).first();
+ new Actions(getDriver()).moveToElement(uiElement,
+ getXOffset(uiElement, 10), getYOffset(uiElement, 10))
.contextClick().perform();
assertEquals("Context click not received correctly",
private void dragToTarget(String dragMode, WebElement dropTarget)
throws IOException {
WebElement draggable = vaadinElementById("label" + dragMode);
- new Actions(driver).moveToElement(draggable, 10, 10).clickAndHold()
- .moveByOffset(5, 0).perform();
- new Actions(driver).moveToElement(dropTarget, 12, 10).perform();
+ new Actions(driver)
+ .moveToElement(draggable, getXOffset(draggable, 10),
+ getYOffset(draggable, 10))
+ .clickAndHold().moveByOffset(5, 0).perform();
+ new Actions(driver).moveToElement(dropTarget,
+ getXOffset(dropTarget, 12), getYOffset(dropTarget, 10))
+ .perform();
compareScreen("dragImageMode" + dragMode);
new Actions(driver).release().perform();
}
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
+import org.openqa.selenium.interactions.Actions;
import com.vaadin.testbench.elements.EmbeddedElement;
import com.vaadin.testbench.elements.LabelElement;
clickAt(41, 22);
checkLocation(41, 22);
- clickAt(0, 0);
- checkLocation(0, 0);
+ clickAt(1, 1);
+ checkLocation(1, 1);
}
private void clickAt(int x, int y) {
EmbeddedElement embedded = $(EmbeddedElement.class).first();
- embedded.click(x, y);
+ embedded.click(getXOffset(embedded, x), getYOffset(embedded, y));
}
private void checkLocation(int expectedX, int expectedY) {
// IE10 and IE11 sometimes click one pixel below the given position
int tolerance = isIE() ? 1 : 0;
- assertTrue(
+ assertEquals(
"Reported Y-coordinate from Embedded does not match click location",
- Math.abs(expectedY - y) <= tolerance);
+ expectedY, y, tolerance);
}
private boolean isIE() {
GridCellElement headerCell = getGrid().getHeaderCell(0, columnIndex);
Dimension size = headerCell.getSize();
new Actions(getDriver())
- .moveToElement(headerCell, size.getWidth() + posX,
- size.getHeight() / 2)
+ .moveToElement(headerCell,
+ getXOffset(headerCell, size.getWidth() + posX),
+ getYOffset(headerCell, size.getHeight() / 2))
.clickAndHold().moveByOffset(offset, 0).release().perform();
}
import java.util.stream.IntStream;
import java.util.stream.Stream;
+import org.junit.Assume;
import org.junit.Test;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import com.vaadin.testbench.elements.GridElement;
import com.vaadin.testbench.elements.GridElement.GridCellElement;
import com.vaadin.testbench.elements.GridElement.GridRowElement;
+import com.vaadin.testbench.parallel.BrowserUtil;
import com.vaadin.testbench.elements.LabelElement;
import com.vaadin.testbench.elements.NotificationElement;
import com.vaadin.testbench.elements.TextFieldElement;
-import com.vaadin.testbench.parallel.BrowserUtil;
import com.vaadin.tests.tb3.MultiBrowserTest;
public class GridComponentsTest extends MultiBrowserTest {
@Test
public void testReuseTextFieldOnScroll() {
- if (BrowserUtil.isPhantomJS(getDesiredCapabilities())) {
- // skip test on PhantomJS as it often crashes the browser
- return;
- }
openTestURL();
GridElement grid = $(GridElement.class).first();
editTextFieldInCell(grid, 0, 1);
GridElement grid = $(GridElement.class).first();
editTextFieldInCell(grid, 1, 1);
// Select row
- grid.getCell(1, 1).click(1, 1);
+ grid.getCell(1, 0).click();
WebElement textField = grid.getCell(1, 1)
.findElement(By.tagName("input"));
@Test
public void testTabNavigation() {
+ Assume.assumeFalse("Firefox has issues with Shift",
+ BrowserUtil.isFirefox(getDesiredCapabilities()));
+
openTestURL();
GridElement grid = $(GridElement.class).first();
import org.openqa.selenium.By;
import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.testbench.elements.GridElement.GridRowElement;
import com.vaadin.testbench.elements.RadioButtonGroupElement;
import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.tests.tb3.MultiBrowserTest;
fail();
}
- grid.getRow(2).click(5, 5);
+ GridRowElement row = grid.getRow(2);
+ row.click(getXOffset(row, 5), getYOffset(row, 5));
waitForElementPresent(By.id("lbl1"));
int openHeight = grid.getSize().getHeight();
detailsRowHeight, "opened" });
}
- grid.getRow(2).click(5, 5);
+ row.click(getXOffset(row, 5), getYOffset(row, 5));
waitForElementNotPresent(By.id("lbl1"));
int afterHeight = grid.getSize().getHeight();
int offset) {
Dimension size = headerCell.getSize();
new Actions(getDriver())
- .moveToElement(headerCell, size.getWidth() + posX,
- size.getHeight() / 2)
+ .moveToElement(headerCell,
+ getXOffset(headerCell, size.getWidth() + posX),
+ getYOffset(headerCell, size.getHeight() / 2))
.clickAndHold().moveByOffset(offset, 0).release().perform();
}
}
private void drag(WebElement source, WebElement target) {
Actions actions = new Actions(getDriver());
- actions.moveToElement(source, 10, 10);
+ actions.moveToElement(source, getXOffset(source, 10),
+ getYOffset(source, 10));
actions.clickAndHold(source);
- actions.moveToElement(target, 10, 10);
+ actions.moveToElement(target, getXOffset(target, 10),
+ getYOffset(target, 10));
actions.perform();
}
}
}
private WebElement openContextMenu() {
+ WebElement target = findElement(By.className("v-table-cell-wrapper"));
+
+ // Make sure target is visible.
+ target.click();
+
Actions actions = new Actions(getDriver());
- actions.contextClick(findElement(By.className("v-table-cell-wrapper")));
+ actions.moveToElement(target, getXOffset(target, 1),
+ getYOffset(target, 1)).contextClick();
actions.perform();
return findElement(By.className("v-contextmenu"));
}
private void resizeTextAreaBy(int offset) {
int resizeHandlerOffset = 10;
- new Actions(getDriver())
- .moveToElement(getTextArea(),
- TEXTAREAWIDTH - resizeHandlerOffset,
- TEXTAREAHEIGHT - resizeHandlerOffset)
+ TextAreaElement textArea = getTextArea();
+ new Actions(getDriver()).moveToElement(textArea,
+ getXOffset(textArea, TEXTAREAWIDTH - resizeHandlerOffset),
+ getYOffset(textArea, TEXTAREAHEIGHT - resizeHandlerOffset))
.clickAndHold().moveByOffset(offset, offset).release().build()
.perform();
}
@Test
public void immediateButtonWithUndefinedWidth() {
- assertThat(getButtonWidth("upload3"), closeTo(69, 4));
+ assertThat(getButtonWidth("upload3"), closeTo(69, 5));
}
}
import static org.junit.Assert.assertThat;
import org.junit.Test;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
import com.vaadin.testbench.elements.WindowElement;
import com.vaadin.testbench.elements.ButtonElement;
WindowElement anotherWindow = openAnotherWindow();
// move the window to make the maximize button visible.
- anotherWindow.move(10, 20);
+ moveWindow(anotherWindow, 10, 20);
maximizedWindow.maximize();
assertThat(maximizedWindow.getCssValue("z-index"),
is(greaterThan(anotherWindow.getCssValue("z-index"))));
}
+
+ private void moveWindow(WindowElement window, int xOffset, int yOffset) {
+ WebElement wrap = window
+ .findElement(org.openqa.selenium.By.className("v-window-wrap"));
+ new Actions(getDriver())
+ .moveToElement(wrap, getXOffset(wrap, 5), getYOffset(wrap, 5))
+ .clickAndHold().moveByOffset(xOffset, yOffset).release().build()
+ .perform();
+ }
}
waitForElementPresent(By.id("focusfield"));
WebElement curtain = findElement(
org.openqa.selenium.By.className("v-window-modalitycurtain"));
- curtain.click();
+ testBenchElement(curtain).click(getXOffset(curtain, 20),
+ getYOffset(curtain, 20));
pressKeyAndWait(Keys.TAB);
pressKeyAndWait(Keys.TAB);
WebElement window4 = driver
.findElement(By.xpath("//*[contains(text(), 'Window 4')]"));
- new Actions(driver).moveToElement(window4, 1, 9).click().perform();
+ new Actions(driver).moveToElement(window4, getXOffset(window4, 1),
+ getYOffset(window4, 9)).click().perform();
compareScreen("win4-on-top");
}
"var ev = document.createEvent('MouseEvents'); ev.initMouseEvent('click', true, true, document.defaultView, 1, arguments[1]-5, arguments[2]-5, arguments[1]-5, arguments[2]-5, false, false, false, false, 1, null); arguments[0].dispatchEvent(ev);",
e, x, y);
} else {
- new Actions(getDriver()).moveToElement(e, xCoord, yCoord)
+ new Actions(getDriver())
+ .moveToElement(e, getXOffset(e, xCoord),
+ getYOffset(e, yCoord))
.contextClick().moveByOffset(-5, -5).click().perform();
}
}
List<WebElement> nodes = $(TreeElement.class).first()
.findElements(By.className("v-tree-node"));
- new Actions(getDriver()).moveToElement(nodes.get(1), 10, 10).click()
- .perform();
+ new Actions(getDriver()).moveToElement(nodes.get(1),
+ getXOffset(nodes.get(1), 10), getYOffset(nodes.get(1), 10))
+ .click().perform();
nodes = $(TreeElement.class).first()
.findElements(By.className("v-tree-node"));
import com.vaadin.testbench.By;
import com.vaadin.testbench.TestBenchElement;
+import com.vaadin.testbench.commands.TestBenchElementCommands;
import com.vaadin.tests.tb3.MultiBrowserTest;
import com.vaadin.v7.testbench.elements.TreeElement;
TreeElement tree = $(TreeElement.class).first();
WebElement bar2 = tree.findElement(By.vaadin("#n[3]"));
WebElement bar5 = tree.findElement(By.vaadin("#n[6]"));
- new Actions(driver).moveToElement(bar2, 11, 8).clickAndHold()
- .moveByOffset(10, 10).perform();
+ new Actions(driver)
+ .moveToElement(bar2, getXOffset(bar2, 11), getYOffset(bar2, 8))
+ .clickAndHold().moveByOffset(10, 10).perform();
/* Drop on Bar5, which is a subtree target */
- new Actions(driver).moveToElement(bar5, 34, 9).release().perform();
- testBenchElement(tree.findElement(By.vaadin("#n[5]/expand"))).click(5,
- 5);
+ new Actions(driver)
+ .moveToElement(bar5, getXOffset(bar5, 34), getYOffset(bar5, 9))
+ .release().perform();
+ WebElement target = tree.findElement(By.vaadin("#n[5]/expand"));
+ testBenchElement(target).click(getXOffset(target, 5),
+ getYOffset(target, 5));
/* Assert that the dragged & dropped node is now a child of Bar5 */
waitUntilElementPresent(tree, "#n[5]/n[0]");
}
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
import com.vaadin.testbench.By;
import com.vaadin.tests.tb3.MultiBrowserTest;
import com.vaadin.testbench.elements.TextAreaElement;
import com.vaadin.testbench.elements.TextFieldElement;
import com.vaadin.tests.data.bean.Sex;
+import com.vaadin.tests.tb3.AbstractTB3Test;
import com.vaadin.tests.tb3.MultiBrowserTest;
+import com.vaadin.tests.tb3.PrivateTB3Configuration;
public abstract class BasicPersonFormTest extends MultiBrowserTest {
super.setup();
logCounter = 0;
+
+ // Use larger view port to make sure everything is visible.
+ testBench().resizeViewPortTo(1500, 1500);
}
@Override
"2. GridLayout: left click on This is tf5");
// click on the layout body (not any component inside the layout)
- layout.click(130, 41);
+ layout.click(getXOffset(layout, 130), getYOffset(layout, 41));
assertLogText("GridLayout body clicked",
"3. GridLayout: left click on <none>");
}
GridLayoutElement layout = $(GridLayoutElement.class).first();
// Drag inside the first label in this layout
+ LabelElement label = layout.$(LabelElement.class).first();
new Actions(getDriver())
- .moveToElement(layout.$(LabelElement.class).first(), 40, 8)
+ .moveToElement(label, getXOffset(label, 40),
+ getYOffset(label, 8))
.clickAndHold().moveByOffset(-20, 0).release().perform();
assertLogText("Mouse dragged in GridLayout",
"1. GridLayout: left click on This is label 1");
// Drag from the third label to a text field in this layout
+ label = layout.$(LabelElement.class).get(2);
+ TextFieldElement textField = layout.$(TextFieldElement.class).get(3);
new Actions(getDriver())
- .moveToElement(layout.$(LabelElement.class).get(2), 40, 8)
- .clickAndHold()
- .moveToElement(layout.$(TextFieldElement.class).get(3), 46, 33)
+ .moveToElement(label, getXOffset(label, 40),
+ getYOffset(label, 8))
+ .clickAndHold().moveToElement(textField,
+ getXOffset(textField, 46), getYOffset(textField, 33))
.release().perform();
assertLogText("Expected the drag to be ignored between elements",
"1. GridLayout: left click on This is label 1");
VerticalLayoutElement layout = $(VerticalLayoutElement.class).get(4);
// Drag inside the first text field
+ TextFieldElement textField = layout.$(TextFieldElement.class).first();
new Actions(getDriver())
- .moveToElement(layout.$(TextFieldElement.class).first(), 25, 9)
+ .moveToElement(textField, getXOffset(textField, 25),
+ getYOffset(textField, 9))
.clickAndHold().moveByOffset(-20, 0).release().perform();
assertLogText("Mouse dragged in VerticalLayout",
"1. VerticalLayout: left click on This is tf5");
// Drag from a caption to its text field
+ textField = layout.$(TextFieldElement.class).get(4);
new Actions(getDriver())
- .moveToElement(layout.$(TextFieldElement.class).get(4), 28, 11)
- .clickAndHold()
- .moveToElement(layout.$(TextFieldElement.class).get(4), 39, 30)
+ .moveToElement(textField, getXOffset(textField, 28),
+ getYOffset(textField, 11))
+ .clickAndHold().moveToElement(textField,
+ getXOffset(textField, 39), getYOffset(textField, 30))
.release().perform();
assertLogText("Expected the drag to be ignored between elements",
"1. VerticalLayout: left click on This is tf5");
AbsoluteLayoutElement layout = $(AbsoluteLayoutElement.class).first();
// Drag inside the first text field's caption
+ TextFieldElement firstTextField = layout.$(TextFieldElement.class)
+ .first();
new Actions(getDriver())
- .moveToElement(layout.$(TextFieldElement.class).first(), 21, 9)
+ .moveToElement(firstTextField, getXOffset(firstTextField, 21),
+ getYOffset(firstTextField, 9))
.clickAndHold().moveByOffset(-10, 0).release().perform();
assertLogText("Mouse dragged in AbsoluteLayout",
"1. AbsoluteLayout: left click on This is its caption");
// Drag from a text field to another text field
+ TextFieldElement otherTextField = layout.$(TextFieldElement.class)
+ .get(1);
new Actions(getDriver())
- .moveToElement(layout.$(TextFieldElement.class).get(1), 54, 7)
+ .moveToElement(otherTextField, getXOffset(otherTextField, 54),
+ getYOffset(otherTextField, 7))
.clickAndHold()
- .moveToElement(layout.$(TextFieldElement.class).first(), 52, 10)
+ .moveToElement(firstTextField, getXOffset(firstTextField, 52),
+ getYOffset(firstTextField, 10))
.release().perform();
assertLogText("Expected the drag to be ignored between elements",
"1. AbsoluteLayout: left click on This is its caption");
CssLayoutElement layout = $(CssLayoutElement.class).first();
// Drag inside the first text field's caption
+ TextFieldElement firstTextField = layout.$(TextFieldElement.class)
+ .first();
new Actions(getDriver())
- .moveToElement(layout.$(TextFieldElement.class).first(), 51, 7)
+ .moveToElement(firstTextField, getXOffset(firstTextField, 51),
+ getYOffset(firstTextField, 7))
.clickAndHold().moveByOffset(-20, 0).release().perform();
assertLogText("Mouse dragged in CSSLayout",
"1. CSSLayout: left click on This is its caption");
// Drag from the first text field to the second text field
+ TextFieldElement otherTextField = layout.$(TextFieldElement.class)
+ .get(1);
new Actions(getDriver())
- .moveToElement(layout.$(TextFieldElement.class).first(), 51, 27)
+ .moveToElement(firstTextField, getXOffset(firstTextField, 51),
+ getYOffset(firstTextField, 27))
.clickAndHold()
- .moveToElement(layout.$(TextFieldElement.class).get(1), 51, 27)
+ .moveToElement(otherTextField, getXOffset(otherTextField, 51),
+ getYOffset(otherTextField, 27))
.release().perform();
assertLogText("Expected the drag to be ignored between elements",
"1. CSSLayout: left click on This is its caption");
public void correctEs5Es6FileImportedThroughFrontend() {
openTestURL();
String es;
- if (BrowserUtil.isIE(getDesiredCapabilities())
- || BrowserUtil.isPhantomJS(getDesiredCapabilities())
- || BrowserUtil.isFirefox(getDesiredCapabilities())) {
+ if (BrowserUtil.isIE(getDesiredCapabilities())) {
es = "es5";
} else {
es = "es6";
openTestURL();
$(ButtonElement.class).first().click();
String es;
- if (BrowserUtil.isIE(getDesiredCapabilities())
- || BrowserUtil.isPhantomJS(getDesiredCapabilities())
- || BrowserUtil.isFirefox(getDesiredCapabilities())) {
+ if (BrowserUtil.isIE(getDesiredCapabilities())) {
es = "es5";
} else {
es = "es6";
element)).intValue();
}
+ /**
+ * Gets the X offset for
+ * {@link Actions#moveToElement(WebElement, int, int)}. This method takes
+ * into account the W3C specification in browsers that properly implement
+ * it.
+ *
+ * @param element
+ * the element
+ * @param targetX
+ * the X coordinate where the move is wanted to go to
+ * @return the correct X offset
+ */
+ protected int getXOffset(WebElement element, int targetX) {
+ if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
+ // Firefox follow W3C spec and moveToElement is relative to center
+ final int width = element.getSize().getWidth();
+ return targetX - ((width + width % 2) / 2);
+ }
+ return targetX;
+ }
+
+ /**
+ * Gets the Y offset for
+ * {@link Actions#moveToElement(WebElement, int, int)}. This method takes
+ * into account the W3C specification in browsers that properly implement
+ * it.
+ *
+ * @param element
+ * the element
+ * @param targetY
+ * the Y coordinate where the move is wanted to go to
+ * @return the correct Y offset
+ */
+ protected int getYOffset(WebElement element, int targetY) {
+ if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
+ // Firefox follow W3C spec and moveToElement is relative to center
+ final int height = element.getSize().getHeight();
+ return targetY - ((height + height % 2) / 2);
+ }
+ return targetY;
+ }
+
/**
* Returns client height rounded up instead of as double because of IE9
* issues: https://dev.vaadin.com/ticket/18469
import org.junit.Test;
import com.vaadin.testbench.elements.TextFieldElement;
-import com.vaadin.tests.tb3.MultiBrowserTest;
+import com.vaadin.tests.tb3.SingleBrowserTest;
/**
* Test for default contrast color variable in valo-font-color function.
*
* @author Vaadin Ltd
*/
-public class ContrastFontColorTest extends MultiBrowserTest {
+public class ContrastFontColorTest extends SingleBrowserTest {
@Test
public void testTextColor() {