【问题标题】:Selenium code freezes after opening second windowSelenium 代码在打开第二个窗口后冻结
【发布时间】:2019-10-16 06:49:34
【问题描述】:

点击“打印更改”后,以下代码会挂起约 12 分钟 按钮,然后抛出该元素在行中不可见的错误: driver.findElement(By.xpath("//button[contains(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

任何帮助将不胜感激。

问候, 投降者

【问题讨论】:

标签: selenium popup wait popupwindow freeze


【解决方案1】:

首先,为了您的安全,请编辑您的帖子,删除您代码中的用户名和密码(然后更改它们)。

就您的问题而言,很有可能:

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

给定 xpath 的元素不止一个,因此您想要的元素可能不可见。 因此,您应该更具体地使用:

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

或尝试使用css selectors

无论如何,请查看docs for locating elements,如果您仍然找不到解决方案,我很乐意再次为您提供帮助。

编辑:为了帮助你我登录了,你的解决方案可能是替换

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();

【讨论】:

  • driver.findElement(By.xpath("//button[contains(text(),'Print Change')]")).click();完美运行,打开了一个新窗口。问题是打开第二个窗口后, System.out.println("Clicked on Print Change button");根本不起作用。 selenium 脚本冻结。
【解决方案2】:

您指定了 120 秒的隐式等待,因此代码将在引发异常之前等待 120 秒。

在这种情况下,我认为 xpath 是错误的,这就是它等待很长时间的原因(可能是文本打印更改之间有一些额外的空间)。使用任意xpath识别工具检查xpath是否正确

我希望下面的代码可以工作

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

【讨论】:

  • xpath 是正确的。 driver.findElement(By.xpath("//button[contains(text(),'Print')]")).click();将不起作用,因为按钮文本是“打印更改”。另外,driver.findElement(By.xpath("//button[contains(text(),'Print Change')]")).click();完美运行。问题是 System.out.println("Clicked on Print Change button");不工作。
  • 我们使用的是包含文本关键字。当我们使用 contains 关键字时,它不需要提及完整的文本(不知道为什么它在这种情况下不起作用)。只是为了澄清一下,您是否能够在控制台上看到 单击打印更改按钮
  • 如果有第二个窗口,您可能需要将控件切换到该特定窗口才能进行操作。有的话告诉我
猜你喜欢
  • 1970-01-01
  • 2012-12-21
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多