Как в Selenium WebDriver записать команду clickAT на Java
Например в selenium IDE записана так
clickAt "xpath=.//*[@id='stations_till']/div[1]", "2,2"
Как записать эту команду на Selenium WebDriver
Как в Selenium WebDriver записать команду clickAT на Java
Например в selenium IDE записана так
clickAt "xpath=.//*[@id='stations_till']/div[1]", "2,2"
Как записать эту команду на Selenium WebDriver
ну это будет выглядеть где-то так
WebElement baseElement = driver.findElement(By.id("foo"));
Actions clicker = new Actions(driver);
clicker.moveToElement(baseElement).moveByOffset(X, Y).click().perform();
У меня возникла такая же ситуация. Но по примеру с верху, вываливается тест на последней строчке. Что это могло бы значить?
Но по примеру с верху, вываливается тест на последней строчке.
Может быть вываливается exception, а не тест?
Если это так - можете выложить stacktrace?
Трассировка:
org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: Offset within element cannot be scrolled into view: (0, 0): [object HTMLInputElement]
Command duration or timeout: 10 milliseconds
Build info: version: ‘2.44.0’, revision: ‘76d78cf’, time: ‘2014-10-23 20:02:37’
System info: host: ‘TROFIMOVICH’, ip: ‘192.168.255.73’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_31’
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=35.0, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 7cb1b7ba-c67a-435d-bf33-6924d1ca790a
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:34)
at org.openqa.selenium.remote.RemoteMouse.mouseMove(RemoteMouse.java:88)
at org.openqa.selenium.interactions.MoveMouseAction.perform(MoveMouseAction.java:35)
at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:31)
at org.openqa.selenium.interactions.Actions.perform(Actions.java:367)
at com.example.tests.Anketa.testAnketa1(Anketa.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: Offset within element cannot be scrolled into view: (0, 0): [object HTMLInputElement]
Build info: version: ‘2.44.0’, revision: ‘76d78cf’, time: ‘2014-10-23 20:02:37’
System info: host: ‘TROFIMOVICH’, ip: ‘192.168.255.73’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_31’
Driver info: driver.version: unknown
at .FirefoxDriver.prototype.mouseMoveTo(file:///C:/Users/TRAFIM~1/AppData/Local/Temp/anonymous5469301912976913086webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:9951:19)
at .DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/TRAFIM~1/AppData/Local/Temp/anonymous5469301912976913086webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:11635:16)
at .DelayedCommand.prototype.executeInternal_(file:///C:/Users/TRAFIM~1/AppData/Local/Temp/anonymous5469301912976913086webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:11640:7)
at .DelayedCommand.prototype.execute/<(file:///C:/Users/TRAFIM~1/AppData/Local/Temp/anonymous5469301912976913086webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:11582:5)
package com.example.tests;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
public class Anketa {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://scretail-adf:9002";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testAnketa1() throws Exception {
driver.get(baseUrl + "/monitor/faces/login.jsf");
driver.findElement(By.id("form:username")).clear();
driver.findElement(By.id("form:username")).sendKeys("brsasb");
driver.findElement(By.id("form:password")).clear();
driver.findElement(By.id("form:password")).sendKeys("brsasb");
driver.findElement(By.id("form:loginButton")).click();
for (int second = 0;; second++) {
if (second >= 60) fail("timeout");
try { if (isElementPresent(By.id("form:mainMenuButton"))) break; } catch (Exception e) {}
Thread.sleep(1000);
}
driver.findElement(By.id("form:mainMenuButton")).click();
WebElement baseElement = driver.findElement(By.id("form:icmTab_0:waitLoadEvent2"));
Actions clicker = new Actions(driver);
clicker.moveToElement(baseElement).moveByOffset(15, 69).click().perform();
}
}
Посмотрите, у Вас корректно отображается элемент? Не выходит за границы экрана?
И второе- вы обращаетесь именно к тому элементу, который Вам нужен? может быть к какому то родительскому, который просто является вспомогательным для содержания нужного Вам?
Элемент точно этот, а как точнее узнать место расположение элемента? Принцип отображения элемента такой: есть кнопка, при нажатии на нее выпадает меню. Жо нажатия на кнопку дело дошло, а вот в этой менюшке выбрать элемент не получается. Через ide он работает нормально, но там стоит clickat. А тут все пляски с бубном испробовал. Может есть ещё какой-нибудь метод?
По идее должно работать следующее:
А можете скинуть следующие куски html: с кнопкой до нажатия, и с кнопкой и меню после нажатия. Поглядим, где у вас может быть проблема.
<!DOCTYPE html>
<html i18n-values="dir:textdirection;" id="uber" class="loading">
<head>
<meta charset="utf-8">
<title i18n-content="pageTitle"></title>
<link id="favicon" rel="icon" type="image/png" sizes="16x16">
<link id="favicon2x" rel="icon" type="image/png" sizes="32x32">
<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css">
<style>/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */
body {
/* http://crbug.com/129406 --- horizontal scrollbars flicker when changing
* sections. */
overflow-x: hidden;
}
#navigation {
height: 100%;
left: 0;
/* This is a hack to prevent the navigation bar from occluding pointer events
* from the bottom scroll bar (which shows when one needs to horizontally
* scroll). Corresponding padding-top to offset this is in uber_frame.css */
margin-top: -20px;
position: absolute;
/* This value is different from the left value to compensate for the scroll
* bar (which is always on and to the right) in RTL. */
right: 15px;
width: 155px;
z-index: 3;
}
#navigation.background {
z-index: 1;
}
#navigation.changing-content {
-webkit-transition: -webkit-transform 100ms, width 100ms;
}
.iframe-container {
-webkit-margin-start: -20px;
-webkit-transition: margin 100ms, opacity 100ms;
bottom: 0;
left: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
z-index: 1;
}
.iframe-container.selected {
-webkit-margin-start: 0;
-webkit-transition: margin 200ms, opacity 200ms;
-webkit-transition-delay: 100ms;
opacity: 1;
z-index: 2;
}
.iframe-container.expanded {
left: 0;
}
iframe {
border: none;
display: block;
height: 100%;
width: 100%;
}
</style>
<script src="chrome://resources/js/cr.js"></script>
<script src="chrome://resources/js/cr/ui/focus_manager.js"></script>
<script src="chrome://resources/js/load_time_data.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="chrome://chrome/uber.js"></script>
<script src="chrome://chrome/uber_utils.js"></script>
</head>
<body>
<div id="navigation"><iframe src="chrome://uber-frame/" name="chrome"></iframe></div>
<div class="iframe-container"
i18n-values="id:historyHost; data-url:historyFrameURL;"
data-favicon="IDR_HISTORY_FAVICON"></div>
<div class="iframe-container"
i18n-values="id:extensionsHost; data-url:extensionsFrameURL;"
data-favicon="IDR_EXTENSIONS_FAVICON"></div>
<div class="iframe-container"
i18n-values="id:settingsHost; data-url:settingsFrameURL;"
data-favicon="IDR_SETTINGS_FAVICON"></div>
<div class="iframe-container"
i18n-values="id:helpHost; data-url:helpFrameURL;"
data-favicon="IDR_PRODUCT_LOGO_16"></div>
<script src="chrome://chrome/strings.js"></script>
<script src="chrome://resources/js/i18n_template2.js"></script>
</body>
</html>
какой-то странный html - без описанных в тестах элементов. Это точно он?
При этом Ваш код натолкнул меня на идею еще одну, которая мне приходила уже в голову. Может быть у Вас меню всплывающее внутри iframe? Хотя, кажется, при этом элемент был бы не найден и ошибка была бы другая.
Это html куков.
вот выкинул отображение меню.
Ну так к сожалению тоже сложно что-либо понять. Такой попап можно отобразить кучей способов и в html коде он может быть представлен во всевозможных вариантах.
Есть подозрение, что у Вас и правда меню в каком-то странном элементе - iframe или чем-то подобном.
А так?
<a id="form:j_idt55:j_idt57:4:subMenuButton" class="contextMenuLink" href="#" style="margin-left: 10px" title="ААААААААААА" onclick="jsf.util.chain(this,event,'icmFrameTabOpen();','mojarra.ab(this,event,\'action\',0,\'form:tabs\')');return false">ААААААААААААААААА</a>
Так.
Это код какой из кнопок? на которую Вы нажимаете или на которую хотите нажать?
Для помощи в решении задачи хотелось бы видеть следующее(еще раз):
Пожалуйста, если не сложно, можете выложить эти 2 куска с обозначениями, что и где? Спасибо.
Из того, что Вы прислали сейчас, очень сложно понять, что это. Если это та кнопка, на которую вы нажимаете - то где ее нажатие в коде тестов? и по коду onClick кажется, что все такие открывается iframe.
1.
Кусок html кода с кнопкой, на которую вы нажимаете для открытия меню:
<div class="icmTab" style="width:24px; float: left; border-width: 1px 1px 1px 1px;"> <table style="width: 100%; height: 100%; border-collapse: collapse;"> <tbody> <tr style="width: 100%; height: 100%"> <td style="width: 100%; height: 100%; text-align: center; vertical-align: middle;"> <img id="form:mainMenuButton" src="/monitor/images/new.png" alt="" style="cursor: pointer;" title="Главное меню"> <img id="form:pleaseWait" src="/monitor/images/twait.gif" alt="" style="display: none;" title="Пожалуйста, подождите..."> </td> </tr> </tbody> </table> </div>
2.
кусок html кода с элементами, на которые вы хотите нажать(если возможно - как можно более раскрыто)
<div id="form:j_idt55:controls_jsfContextMenu_body" class="contextMenu " style="left: 15px; top: 71px; z-index: 10000; display: block;"> <input id="form:j_idt55:j_idt49:0:controls_jsfContextMenu_event" type="submit" name="form:j_idt55:j_idt49:0:controls_jsfContextMenu_event" value="" style="display: none" onclick="mojarra.ab(this,event,'action',0,0);return false"> ... <br> <a id="form:j_idt55:j_idt57:4:subMenuButton" class="contextMenuLink" href="#" style="margin-left: 10px" title="Договора" onclick="jsf.util.chain(this,event,'icmFrameTabOpen();','mojarra.ab(this,event,\'action\',0,\'form:tabs\')');return false">Договора</a> <br> ...
Клик по элементу form:mainManuButton у Вас проходит как Вы писали.
Не очень понятно, как у Вас не выкидывается ошибка в этом месте:
Так как среди приложенного кода с элементами - такого элемента нету. Или я ошибаюсь?
При этом в изначальном сообщении вообще какой-то другой xpath. Немного запутанно.
То есть по идее, если я правильно понял код html, то следующее должно работать:
driver.findElement(By.id("form:mainManuButton")).click();
driver.findElement(By.cssSelector("a[title='Договора']")).click();
Попробовал во так:
WebElement baseElement = driver.findElement(By.id("form:j_idt55:j_idt57:4:subMenuButton"));
Actions clicker = new Actions(driver);
clicker.moveToElement(baseElement).moveByOffset(14, 200).click().perform();
Как тебе сказать, действие нажатие прошло но действия открытия новой страницы не произошло.
Твой код тоже также работает.
ошибка сейчас вот такая с трейсов:
org.openqa.selenium.NoSuchElementException: Unable to locate element: {“method”:“id”,“selector”:“s1:it2::content”}
Command duration or timeout: 30.05 seconds
For documentation on this error, please visit: Selenium
Build info: version: ‘2.44.0’, revision: ‘76d78cf’, time: ‘2014-10-23 20:02:37’
System info: host: ‘TROFIMOVICH’, ip: ‘192.168.255.73’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_31’
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=35.0, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 3a2d3dae-60a7-45b9-aefa-1b180d069f2a
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)
at org.openqa.selenium.By$ById.findElement(By.java:214)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)
at com.example.tests.Anketa.testAnketa1(Anketa.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {“method”:“id”,“selector”:“s1:it2::content”}
For documentation on this error, please visit: Selenium
Build info: version: ‘2.44.0’, revision: ‘76d78cf’, time: ‘2014-10-23 20:02:37’
System info: host: ‘TROFIMOVICH’, ip: ‘192.168.255.73’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.8.0_31’
Driver info: driver.version: unknown
at .FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/TRAFIM~1/AppData/Local/Temp/anonymous1208207135295241646webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:9641:26)
at .fxdriver.Timer.prototype.setTimeout/<.notify(file:///C:/Users/TRAFIM~1/AppData/Local/Temp/anonymous1208207135295241646webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:548:5)