такой вариант тоже прекрасно работает, спасибо Максим!
- Форум тестировщиков
- → Публикации raa
20 публикаций создано raa (учитываются публикации только с 24 апреля 2023)
Отправлено автор: raa 26 марта 2014 - 09:32 в Selenium - Functional Testing
такой вариант тоже прекрасно работает, спасибо Максим!
Отправлено автор: raa 26 марта 2014 - 09:17 в Selenium - Functional Testing
.//div[contains(text(),'Согласование')]/../preceding-sibling::td[2]/a
td[2] - здесь индекс попробуйте поменять
Возможно я ошибся в xpath, но копать надо в сторону preceding-sibling
спасибо за помощь, толкнули в правильном направлении
т.к. чекбокс является "братом" поля статуса документа, подобрался вот так:
.//a[contains(text(),'Согласование')]/../preceding-sibling::td/input[1]
p.s. Всем спасибо
Отправлено автор: raa 25 марта 2014 - 12:06 в Selenium - Functional Testing
Всем доброго дня, прошу помощи
есть таблица с документами, напротив каждого из документов можно отмечать чекбокс, у каждого из документов есть значения в соответствующих колонках. До определенного дня "X" я находил и кликал нужный мне чекбокс определенного документа по следующей цепочке из 3х значений
driver.findElement(By.xpath("//td/a[contains(text(), 'Согласован')]/../td[contains(text(), '666')]/../td/input[@type='checkbox']")).click();
Но вот настал день "X" и программеры сделали одно из значений кликабельной ссылкой, что теперь не позволяет мне обратиться к определенному чекбоксу определенного документа...
Проверяю через Firepath - объект //td/a[contains(text(), 'Согласован')] корректно находится, но в комплекте //td/a[contains(text(), 'Согласован')]/../td[contains(text(), '666')]/../td/input[@type='checkbox'] - не фурычит, наверное я неправильно определяю..
вот код строки
Отправлено автор: raa 24 марта 2014 - 09:07 в Selenium - Functional Testing
мож по простому через xpath?
//span[contains(text(), 'Set')]
Отправлено автор: raa 13 марта 2014 - 05:49 в Selenium - Functional Testing
Спасибо всем, кто пытался помочь!
Отправлено автор: raa 12 марта 2014 - 07:10 в Selenium - Functional Testing
Никто мне не обещал конечно, это я так наивно предположил... Буду признателен, если подскажете каким образом это можно реализовать?
Отправлено автор: raa 11 марта 2014 - 14:53 в Selenium - Functional Testing
к сожалению работа возможно исключительно в IE, под FF я даже не смогу авторизоваться.
по поводу параметра: capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS,true);
с этим параметром тесты по всей видимости пытаются перехватить фокус друг у друга и "ужас" начинается уже на этапе авторизации пользователей.
На данный момент при запуске сьюта с 14й тестами, валятся где то 1-2, но это я грешу на какую то виртуалку на которую хаб направляет выполнение этих тестов (виртуалки слабенькие). Но на данный момент на лицо другая проблема: тесты запускаются одновременно это да, но синхронности в действиях вообще нет, т.е. если рассматривать те тесты которые отправлены на определенную ноду тесты выполняются совсем не синхронно
Отправлено автор: raa 11 марта 2014 - 11:50 в Selenium - Functional Testing
скажите, а я правильно понял, что мне надо сделать вот так в требованиях к тесту?
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS,true);
Отправлено автор: raa 11 марта 2014 - 10:24 в Selenium - Functional Testing
а параллелю через testng.xml
Отправлено автор: raa 11 марта 2014 - 09:53 в Selenium - Functional Testing
вот один из тестов, остальные практически идентичны
public class SimpleDo1 {public String baseUrl;public RemoteWebDriver driver;@BeforeClasspublic void setUp() throws Exception {URL hubUrl = new URL("http://192.168.50.154:4444/wd/hub");DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setBrowserName("internet explorer");capabilities.setPlatform(Platform.WINDOWS);driver = new RemoteWebDriver(hubUrl, capabilities);baseUrl = "ссылка";driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);}@Testpublic void OpenAndGetToPK() throws Exception {driver.get(baseUrl);driver.findElement(By.id("login")).sendKeys("025011_KSB");driver.findElement(By.id("password")).sendKeys("1111111");driver.findElement(By.id("loginBtn")).click();// проверяем существование элемента, который должен быть после обычного логина и после промежуточной страницы.if (driver.findElements(By.xpath("//em[@class='x-btn-split x-unselectable']")).size() < 1) {// вводим причину принудительного логина и настойчиво логинимсяdriver.findElement(By.name("pushOutMessage")).sendKeys("извините, это автотест!!!");driver.findElement(By.xpath("//*[@id='loginBtn']")).click();}// идем дальшеdriver.findElement(By.xpath("//em[@class='x-btn-split x-unselectable']")).click();//driver.findElement(By.linkText("Текстовый документ")).click();driver.findElement(By.id("ND")).sendKeys("123");driver.findElement(By.id("DD")).sendKeys("09.03.2014", Keys.ENTER);driver.findElement(By.id("btnSave")).click();driver.findElement(By.id("btnClose")).click();driver.findElement(By.xpath("//button[contains(@class, 'x-btn-text') and text() = 'OK']")).click();driver.findElement(By.id("filterDocumentStartDate")).sendKeys("09.03.2014", Keys.ENTER);driver.findElement(By.id("filterDocumentEndDate")).sendKeys("09.03.2014", Keys.ENTER);driver.findElement(By.xpath(".//a[@title='Применить']")).click();driver.findElement(By.xpath(".//input[@title='Выбрать все']")).click();driver.findElement(By.id("menu")).click();driver.findElement(By.xpath(".//option[contains(text(),'На утверждение')]")).click();driver.findElement(By.xpath(".//button[contains(text(), 'Подписать')]")).click();Thread.sleep(20000);}@AfterClasspublic void teardown(){driver.quit();}}
Отправлено автор: raa 11 марта 2014 - 09:00 в Selenium - Functional Testing
Приветствую всех, я новичек и в селениуме и в гриде, пытаюсь разобраться:
Есть необходимость реализовать некий вид нагрузки с одновременной работой большого кол-ва эксплореров.
Условие:
-работа веб приложения возможна только в IE;
-скрипт должен выполняться одновременно, кол-во пользователей порядка 100;
Почему не jmeter:
Реализовать приходится именно через selenium grid т.к. для работы необходим обязательно запущенный IE т.к. в личных кабинетах пользователей используется плагин для использования сертификатов безопасности который работает только под ie и только если ie реально запущен....
А теперь внимание вопрос: возможно ли на каждой ноде одновременный запуск и одновременная работа нескольких IE?
На данный момент я сконфигурировал на каждой ноде по 5 возможных одновременно запущенных IE, но grid как то странно с ними работает, он вроде бы запускает необходимое кол-во IE, но действия выполняет только в той сессии которая открыта, остальные либо валяться, либо действия в них выполняют только по окончанию действий в текущей отображаемой сессии.
Вопрос возник потому, что 100 виртуалок у меня нет и точно не будет, возможно что удастся получить 10-15 виртуалок, поэтому я наивно рассчитывал на каждой одновременную работу нескольких IE.... это невозможно?
Использую Eclipse + TestNG + Selenium Grid
Отправлено автор: raa 24 февраля 2014 - 10:53 в Selenium - Functional Testing
изучать конечно же мне! Сергей, что вы...
По поводу не пошло: я сейчас еще раз проверил, но сделал поиск по другому элементу (кнопке) и все заработало. Спасибо вам!!!
Отправлено автор: raa 24 февраля 2014 - 08:16 в Selenium - Functional Testing
Сергей, я благодарен за помощь, к сожалению ваш последний совет не помог, по всей видимости надо изучать ООП сначала...
Отправлено автор: raa 20 февраля 2014 - 18:33 в Selenium - Functional Testing
Отправлено автор: raa 20 февраля 2014 - 14:05 в Selenium - Functional Testing
Я немного видоизменил критерий определения появления промежуточной страницы т.к. по предложенному вами варианте почему то не работало. Т.к. у меня на первом экране и на промежуточном (который может появится, а может и нет) есть одинаковая кнопка ВХОД, я выбрал определение по этой кнопке.
driver.findElement(By.name("login")).sendKeys("12345");driver.findElement(By.name("password")).sendKeys("1111111");//driver.navigate().to("javascript:document.getElementById('LoginBtn').click()");driver.findElement(By.xpath("//*[@id='loginBtn']")).click();List<WebElement> lst = driver.findElements(By.xpath("//*[@id='loginBtn']"));if (lst.isEmpty()) {//обрабатываем страницу апруваdriver.findElement(By.name("pushOutMessage")).sendKeys("извините, это автотест!!!");driver.findElement(By.xpath("//*[@id='loginBtn']")).click();} else {lst.get(0).click();driver.findElement(By.id("ext-gen26")).click();далее идёт основной тест
при таком варианте исполнения тест отрабатывает до конца только, если промежуточная страница появилась, а если промежуточная страница не появилась, то тест останавливается перед выполнением действия driver.findElement(By.id("ext-gen26")).click(); и валится экспешн:
OpenAndAuthorise_AIS1OpenAndAuthorise_AIS1testOpenAndGetTologinScreen3(OpenAndAuthorise_AIS1)org.openqa.selenium.NoSuchElementException: Unable to find element with name == pushOutMessage (WARNING: The server did not provide any stacktrace information)
Отправлено автор: raa 20 февраля 2014 - 10:28 в Selenium - Functional Testing
С последним варинатом, что вы предложили по попытке искать кнопку
OpenAndAuthorise_AIS1OpenAndAuthorise_AIS1testOpenAndGetTologinScreen3(OpenAndAuthorise_AIS1)java.lang.IllegalMonitorStateException
Отправлено автор: raa 20 февраля 2014 - 09:38 в Selenium - Functional Testing
с этим вариантом тест останавливается на моменте нажатия кнопки авторизации, как раз перед возможным появлением промежуточной страницы
OpenAndAuthorise_AIS1
OpenAndAuthorise_AIS1
testOpenAndGetTologinScreen3(OpenAndAuthorise_AIS1)
org.openqa.selenium.NoSuchElementException: Unable to find element with name == login (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.25 seconds
For documentation on this error, please visit: http://seleniumhq.or...ch_element.html
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:12:12'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{platform=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, ignoreZoomSetting=false, enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss, version=7, ie.usePerProcessProxy=false, cssSelectorsEnabled=true, ignoreProtectedModeSettings=false, requireWindowFocus=false, handlesAlerts=true, initialBrowserUrl=http://localhost:41752/, ie.forceCreateProcessApi=false, nativeEvents=true, browserAttachTimeout=0, ie.browserCommandLineSwitches=, takesScreenshot=true}]
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:193)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:380)
at org.openqa.selenium.By$ByName.findElement(By.java:305)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299)
at OpenAndAuthorise_AIS1.testOpenAndGetTologinScreen3(OpenAndAuthorise_AIS1.java:46)
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:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
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:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
java.lang.IllegalMonitorStateException
Отправлено автор: raa 20 февраля 2014 - 08:14 в Selenium - Functional Testing
ссылку торопился спрятать - поэтому недоудалил...
Отправлено автор: raa 20 февраля 2014 - 08:07 в Selenium - Functional Testing
Окно, если я все правильно понимаю - одно, просто возможен вариант когда отобразиться лишняя страничка
Отправлено автор: raa 20 февраля 2014 - 07:42 в Selenium - Functional Testing
Друзья, всех приветствую. Я совсем новичек в работе с webdriver. Никак не могу составить рабочее условие "если и то"... Понимаю, что вопрос возможно совсем простой, но 2 дня гуглю и так и не могу найти рабочее решение, в ООП тоже очень слаб.
условие:
есть несложный тест, который выполняет последовательно авторизацию на сайте и далее выполняет некую последовательность действий.
необходимо:
учитывать, что после нажатия кнопки авторизации, возможно появится предупреждающая страничка с неким текстом и с кнопками "ВХОД" и "ОТМЕНА". Если страничка появилась необходимо нажать на кнопку ВХОД и далее идти по списку действий теста, если страничка не отобразилась, то необходимо сразу переходить к дальнейшим действия теста.
Для простоты решил, что судить о появлении страничку можно по уникальному тексту который отображается на странице, но как построить условие
если есть текст то делать то
а если текста нет то ничего не делать и идти дальше не понимаю
public class OpenAndAuthorise_AIS1 {
private WebDriver driver;private String baseUrl;private boolean acceptNextAlert = true;private StringBuffer verificationErrors = new StringBuffer();@Beforepublic void setUp() throws Exception {System.setProperty("webdriver.ie.driver", "C:\\IEDriverserver.exe");//driver = new ChromeDriver();//driver = new FirefoxDriver();driver = new InternetExplorerDriver();baseUrl = "открываемая страничка";driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);}@Testpublic void testOpenAndGetTologinScreen3() throws Exception {driver.get("открываемая страничка");driver.findElement(By.name("login")).sendKeys("1234567");driver.findElement(By.name("password")).sendKeys("1111111");driver.navigate().to("javascript:document.getElementById('LoginBtn').click()");вот тут может появится или не появится предупреждениеdriver.findElement(By.id("ext-gen26")).click();driver.findElement(By.xpath("/html/body/div[4]/div[2]/div/table/tbody/tr/td/table/tbody/tr/td/div/div/div/div/table/tbody/tr/td/table/tbody/tr[2]/td[2]/em")).click();driver.findElement(By.id("ext-gen73")).click();driver.findElement(By.id("btnSave")).click();driver.findElement(By.id("NumberDoc")).sendKeys("123456");
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru