Код Selenium зависает после открытия второго окна - PullRequest
0 голосов
/ 16 октября 2019

Следующий код зависает в течение примерно 12 минут после нажатия кнопки «Изменить печать», а затем выдает ошибку, что элемент не отображается в строке: driver.findElement (By.xpath (кнопка «// [содержит (text (), 'печатьИзменить ')] ")). Click ();

System.setProperty("webdriver.chrome.driver", 
System.getProperty("user.dir")+ "\\exe\\chromedriver.exe");      
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
driver.get(prop.getProperty("https://genpact-qa-smartit.onbmc.com"));          
driver.findElement(By.xpath("//*[@id='okta-signin- 
username']")).sendKeys(userid);
driver.findElement(By.xpath("//*[@id='okta-signin- 
password']")).sendKeys(pwd);
driver.findElement(By.xpath("//*[@id='okta-signin-submit']")).click();
driver.findElement(By.xpath("//a[@id='header-search_button']")).click();


driver.findElement(By.xpath("//input[@id='globalSearchBox']")). 
sendKeys("CRQ000000029504");

Robot robot=new Robot();

robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
driver.findElement(By.xpath("//a[text()='View Full Change']")).click();
Thread.sleep(3000);
driver.findElement(By.xpath("//div[@title='Print']")).click();
Thread.sleep(3000);
driver.findElement(By.xpath("//button[contains(text(),'Print 
Change')]")).click();
System.out.println("Clicked on Print Change button");

Я использую ОС: Windows 10;Браузер: Chrome 77.0.3865.90;Селен: 3.141.59

Любая помощь будет высоко ценится.

С уважением, Surender

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Вы указали неявное ожидание 120 секунд, поэтому код будет ждать 120 секунд, прежде чем выдать исключение.

в этом случае я думаю, что xpath неправильный, поэтому он ждет долгое время (может быть, между изменением печати текста есть дополнительное пространство). Используйте любой инструмент идентификации xpath, чтобы проверить правильность или отсутствие xpath

Я надеюсь, что следующий код может работать

driver.findElement(By.xpath("//button[contains(text(),'Print')]")).click();
0 голосов
/ 16 октября 2019

Прежде всего, для вашей безопасности, пожалуйста, отредактируйте ваше сообщение, удалив имя пользователя и пароль, которые есть в вашем коде (а затем измените их).

Что касается вашей проблемы, существует высокая вероятность того, что:

driver.findElement(By.xpath("//button[contains(text(),'Print 
Change')]")).click();

существует более одного элемента с данным xpath, поэтому нужный вам может быть не виден. Поэтому вы должны быть более конкретны с:

[contains(text(),' ... ']

или попробуйте использовать селекторы css .

В любом случае ищите документы для поиска элементов и если вы все еще не нашли решение, я буду рад помочь вам снова.

Редактировать: Чтобы помочь вам, я вошел в систему, и ваше решение, вероятно, должно заменить

driver.findElement(By.xpath("//button[contains(text(),'Print 
Change')]")).click();

с

driver.findElement(By.xpath("/html/body/div[4]/div/div/div/div[3]/div/button[1])]")).click();
...