Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Выбор нескольких элементов с помощью WebDriver


(iczaur) #1

Добрый день коллеги!

Есть небольшой тест.  Суть его заключается в том, что он выделяет (должен выделять) несколько элементов из таблицы, после чего становится доступна кнопка <    driver.findElement(By.xpath("//td[text()='Chart Selected Metrics']")).click();> , делает скриншот и сохраняет.

 

 

        @Test
        public void EapArgusThreadsBusy() throws IOException, InterruptedException {
            Actions action =  new Actions(driver);
            driver.findElement(By.xpath("//td[text()= 'jboss12.нагрузка и время отклика']")).click();
            TimeUnit.SECONDS.sleep(2);
            driver.findElement(By.xpath("//a[@id='EAPjboss12:2099argus']")).click();
            driver.findElement(By.xpath("//td[@class='tabTitle' and text()='Monitoring']")).click();
            TimeUnit.SECONDS.sleep(2);
            WebElement element1 = driver.findElement(By.xpath("//div[text()='Active Thread Count']"));
            WebElement element2 = driver.findElement(By.xpath("//div[text()='ArgusThreadsBusy']"));
            WebElement element3 = driver.findElement(By.xpath("//div[text()='JVM Free Memory']"));
            action.keyDown(Keys.CONTROL).click(element1).click(element2).click(element3);
            Action act = action.build();
            act.perform();
            driver.findElement(By.xpath("//td[text()='Chart Selected Metrics']")).click();
 
           /* File scrnst = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrnst, new File("d://1//rhq//Ресурсы JBoss//EAP Argus Threads Busy.png"));
*/
 
 
    }
 
 
 
Но проблема теста в том, что он не работает. Визуально при выполнении теста видно, что выделяются все элементы element1...element3 но выделяются они без нажатия control, и соответственно кнопка (которая сравнивает эти метрики не рабоатет).
Что я делаю не так?

(iczaur) #2

Напоминаю о себе


(Mykhailo Poliarush) #3

если для каждого нажатия необходимо держать ctrl

попробуйте вот такой вот код

action.click(Keys.CONTROL+element1).click(Keys.CONTROL+element2).click(Keys.CONTROL+element3);


(Mykhailo Poliarush) #4

видим, слышим, только вот активным людей не так уж много


(Sergey Korol) #5

Известный баг селениума. Видел пост еще 2012 года, до сих пор не пофиксили. Можете попробовать Robot класс, некоторым помог. Тут еще постили патч, но он написан на сях.

Да, и в perform метод уже вшит вызов build. По крайней мере в последней версии либы.


(iczaur) #6

Вот такая ошибка при использовании action.click(Keys.CONTROL+element1).click(Keys.CONTROL+element2).click(Keys.CONTROL+element3);

Operator '+' cannot be applied to 'org.openqa.selenium.Keys', 'org.openqa.selenium.WebElement


(iczaur) #7

Robot спасет МИР получилось 

 

     Robot rob = new Robot();
            rob.keyPress(17);
            driver.findElement(By.xpath("//div[text()='Active Thread Count']")).click();
            driver.findElement(By.xpath("//div[text()='ArgusThreadsBusy']")).click();
            driver.findElement(By.xpath("//td[text()='Chart Selected Metrics']")).click();
            rob.keyRelease(17);
Вот так вот ctrl нажал и выдлелил что надо. Спасибо

(iczaur) #8

Для людей которые столкнуться с такой проблеммой 

Вот тут можно посмотереть Int keyCode клавиши  CONTROL ну и др.   http://delphi-box.ru/view_post.php?id=16


(Mykhailo Poliarush) #9

да код не верный, надо было сначала попробовать перед тем, как вам дать его

сорри :)


(Sergey Korol) #10

Робот не спасет, когда начнете запускать тесты удаленно.