Перейти к содержимому

Публикации raa

20 публикаций создано raa (учитываются публикации только с 24 апреля 2023)


#128692 Не могу подобраться к чекбоксу

Отправлено автор: raa 26 марта 2014 - 09:32 в Selenium - Functional Testing

такой вариант тоже прекрасно работает, спасибо Максим!




#128689 Не могу подобраться к чекбоксу

Отправлено автор: 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. Всем спасибо




#128629 Не могу подобраться к чекбоксу

Отправлено автор: 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'] - не фурычит, наверное я неправильно определяю..

 

вот код строки 

 

 

 

 

 

Прикрепленные изображения

  • image2.png



#128558 Помогите нажать кнопку по локатору

Отправлено автор: raa 24 марта 2014 - 09:07 в Selenium - Functional Testing

мож по простому через xpath?

 

//span[contains(text(), 'Set')] 




#128174 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: raa 13 марта 2014 - 05:49 в Selenium - Functional Testing

Спасибо всем, кто пытался помочь!




#128108 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: raa 12 марта 2014 - 07:10 в Selenium - Functional Testing

Никто мне не обещал конечно, это я так наивно предположил... Буду признателен, если подскажете каким образом это можно реализовать?




#128074 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: raa 11 марта 2014 - 14:53 в Selenium - Functional Testing

к сожалению работа возможно исключительно в IE, под FF я даже не смогу авторизоваться.

 

по поводу параметра: capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS,true); 

с этим параметром тесты по всей видимости пытаются перехватить фокус друг у друга и "ужас" начинается уже на этапе авторизации пользователей.

 

На данный момент при запуске сьюта с 14й тестами, валятся где то 1-2, но это я грешу на какую то виртуалку на которую хаб направляет выполнение этих тестов (виртуалки слабенькие). Но на данный момент на лицо другая проблема: тесты запускаются одновременно это да, но синхронности в действиях вообще нет, т.е. если рассматривать те тесты которые отправлены на определенную ноду тесты выполняются совсем не синхронно




#128048 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: raa 11 марта 2014 - 11:50 в Selenium - Functional Testing

скажите, а я правильно понял, что мне надо сделать вот так в требованиях к тесту? 

 

capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS,true);

 




#128038 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: raa 11 марта 2014 - 10:24 в Selenium - Functional Testing

а параллелю через testng.xml

 

<suite name="Suite1" parallel="instances" thread-count="10" verbose="1" >
  <test name="Pachka"   >
    <packages>
      <package name="many.users.goinWild" />
   </packages>
 </test>
</suite>
 
p.s. в данный момент у меня 3 ноды, по 5 ИЕ на каждую настроено



#128034 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: raa 11 марта 2014 - 09:53 в Selenium - Functional Testing

вот один из тестов, остальные практически идентичны

 


public class SimpleDo1 {
 
 public String baseUrl;
 public RemoteWebDriver driver;
 
  @BeforeClass
 
  public 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);
 
  
}
 
 
@Test
public 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);
 
 
}
 
 
 
  @AfterClass
 
public void teardown(){
driver.quit();
}
 
}
 

 

 




#128021 Selenium Grid + Запуск одновременно большого кол-ва сессий IE

Отправлено автор: 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

 

 




#127415 webdriver простое ветвление

Отправлено автор: raa 24 февраля 2014 - 10:53 в Selenium - Functional Testing

изучать конечно же мне! Сергей, что вы... 

 

По поводу не пошло: я сейчас еще раз проверил, но сделал поиск по другому элементу (кнопке) и все заработало. Спасибо вам!!!  




#127405 webdriver простое ветвление

Отправлено автор: raa 24 февраля 2014 - 08:16 в Selenium - Functional Testing

Сергей, я благодарен за помощь, к сожалению ваш последний совет не помог, по всей видимости надо изучать ООП сначала... 




#127317 webdriver простое ветвление

Отправлено автор: raa 20 февраля 2014 - 18:33 в Selenium - Functional Testing

прикладываю скрины

Прикрепленные изображения

  • после_авторизации.png
  • промежуточная_страница.png
  • страница_логина.png



#127304 webdriver простое ветвление

Отправлено автор: 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_AIS1
OpenAndAuthorise_AIS1
testOpenAndGetTologinScreen3(OpenAndAuthorise_AIS1)
org.openqa.selenium.NoSuchElementException: Unable to find element with name == pushOutMessage (WARNING: The server did not provide any stacktrace information)
 

 

 

 
 



#127282 webdriver простое ветвление

Отправлено автор: raa 20 февраля 2014 - 10:28 в Selenium - Functional Testing

С последним варинатом, что вы предложили по попытке искать кнопку

 

 @Test
  public void testOpenAndGetTologinScreen3() throws Exception {
    driver.get("ссылка");
    driver.findElement(By.name("login")).sendKeys("123456");
    driver.findElement(By.name("password")).sendKeys("1111111");
    driver.navigate().to("javascript:document.getElementById('LoginBtn').click()");
     
    List<WebElement> lst = driver.findElements(By.id("ext-gen26"));
    
    if (lst.isEmpty()) {
       //обрабатываем страницу апрува
    driver.navigate().to("javascript:document.getElementById('LoginBtn').click()");
   
    } else {
       lst.get(0).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();
 
 
В таком исполнении, если отображается промежуточная страница, проходит ожидание в районе 30-45 секунд, затем нажирмается кнопка ВХОД и далее тест валится:
 
OpenAndAuthorise_AIS1
OpenAndAuthorise_AIS1
testOpenAndGetTologinScreen3(OpenAndAuthorise_AIS1)
java.lang.IllegalMonitorStateException
 

 

 

 



#127277 webdriver простое ветвление

Отправлено автор: 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




#127273 webdriver простое ветвление

Отправлено автор: raa 20 февраля 2014 - 08:14 в Selenium - Functional Testing

ссылку торопился спрятать - поэтому недоудалил... 




#127271 webdriver простое ветвление

Отправлено автор: raa 20 февраля 2014 - 08:07 в Selenium - Functional Testing

Окно, если я все правильно понимаю - одно, просто возможен вариант когда отобразиться лишняя страничка




#127268 webdriver простое ветвление

Отправлено автор: 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();
 
  @Before
  public 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);
   
      
           
  }
  
    @Test
  public 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");