Предварительные требования:
Selenium 3.141
Браузер Firefox
Требование : Получить координаты x, ywebelement и выполнить перемещение мыши по координатам xy. X рассчитывается правильно, тогда как y координата имеет длину в 100 пикселей.
Примечание : поле формы Webelement скрыто, пользователь выполнит вертикальную прокрутку и щелкнет по нему. Координаты берутся после прокрутки.
WebElement fromfield = driver.findElement(By.xpath("//*[contains(@data-field-name,'deliverables')]"));
jse.executeScript("arguments[0].scrollIntoView();",fromfield); //scroll to the webelement, a small wait is given after scrolling
org.openqa.selenium.Point fromLocation = fromfield.getLocation();
int fromfield_x = fromLocation.x;
int fromfield_y = fromLocation.y; //getx/gety returns same values
Actual Output: x = 550, y = 600
Expected Output: x = 550, y = 700. (**Note**: If I pass 700, then mouse moves correctly to required element, but here y is calculated incorrect)
Другие испытания: Пробовал при открытом браузере в полноэкранном режиме, но та же проблема.
Запросы:
Как получить точноеу координата?
Рассчитывается ли координата xy из левого верхнего угла окна рабочего стола или окна просмотра?
Обновление
Статус:
Исходя из вашего предложения, я попробовал приведенную ниже строку кода, и да, он автоматически прокручивается до нужного элемента.
WebElement source = fromfield.findElement(By.xpath(".//*[contains(@title,'test')]"));
new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(source))).build().perform();
Результат 1:
System.out.println("Y coordinate is: "+source.getLocation().getY());
int from_x = source.getLocation().getX();
int from_y = source.getLocation().getY();
Я получаю y ко-ордеров как 700, но элемент может иметь 900 пикселей.
Когда я делаю мышиный ход, он возвращается на 700 пикселей, что не является элементом, который нужно перетаскивать. Мой webelement (источник) по-прежнему на 900 пикселей. С координатой X все в порядке.
robot.mouseMove(from_x , from_y); //moves to 700 pixels
Actions maction=new Actions(driver);
Action drag = maction.clickAndHold(source).pause(3000).build();
drag.perform(); //tries to drag from 700 pixels
или
new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(source))).clickAndHold(source).build().perform();
Снова у не хватает. В чем будет причина?
Результат 2: Вышеуказанный фрагмент кода (movetoelement) работает для chrome, но не для firefox.