为什么不Selenium WebDriver切换到我的新标签,这是一个Excel报告

我在其他情况下多次使用这种方法,它侧重于我刚刚打开的选项卡就好了。 现在我已经链接到一个活跃的Excel报告,当我点击它时被加载到一个新的标签中,我的代码不会改变焦点到新加载的标签。 我不知道为什么,因为控制选项卡仍然在浏览器中工作,所以不应该在我的代码仍然工作? 任何帮助,为什么我的代码不关注我新打开的Excel报告选项卡将是很大的帮助。 谢谢!

public void mymethodnameishere (WebDriver driver) { System.out.println("Starting mymethodnameishere method"); Actions action = new Actions(driver); action.moveToElement(driver.findElement(mylocatorishere)); action.contextClick(driver.findElement(mylocatorishere)).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform(); action.sendKeys(Keys.CONTROL).sendKeys(Keys.TAB).perform(); System.out.println("mymethodnameishere method completed successfully"); 

而不是打开一个新的标签,打开Excel报告在新窗口中,因为selenium不能切换两个标签上的句柄工作,因为他们都属于同一个窗口。 即使您使用“CTRL + ENTER”在标签之间进行切换,恐怕焦点不会从原始选项卡移开。 如果您在新窗口中打开报告 ,则可以使用相应的窗口句柄在两者之间切换。

下面的Java代码将帮助您在新窗口中打开报告:

 action.contextClick(driver.findElement(mylocatorishere)).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform(); 

另外,请通过这个链接,我已经说了一个例子,同时使用两个窗口

我实际上find了另一种方法来使它在标签中工作,而不必打开窗户。 重点转移到我刚刚打开的excel报告,只需添加下面的同一行。 现在它工作正常。

 action.sendKeys(Keys.CONTROL).sendKeys(Keys.TAB).perform(); 

最终工作代码如下:

  public void mymethodnameishere (WebDriver driver) { System.out.println("Starting mymethodnameishere method"); Actions action = new Actions(driver); action.moveToElement(driver.findElement(mylocatorishere)); action.contextClick(driver.findElement(mylocatorishere)).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform(); action.sendKeys(Keys.CONTROL).sendKeys(Keys.TAB).perform(); action.sendKeys(Keys.CONTROL).sendKeys(Keys.TAB).perform(); System.out.println("mymethodnameishere method completed successfully");