当body标签被style =“ overflow:hidden;”隐藏时,如何切换到框架

时间:2019-03-26 18:48:04

标签: java selenium selenium-webdriver iframe webdriverwait

在PeopleSoft页面中,如果单击查找会弹出一个新的小部件,则需要选择一个选项。

DOM的设计方式是在body标签中使用“ style =“ overflow:hidden;”“,使用下面的xpath,我可以在google chrome中标识框架,但是,我无法切换到框架,然后单击我需要选择的选项

iframe的HTML:

<iframe frameborder="0" id="ptModFrame_2" name="ptModFrame_2" src="https://*******:8560/psc/umcssi2/EMPLOYEE/SA/c/SSR_PROG_ENRL.SSR_APT_REQ_RUNCNT.GBL?ICType=Panel&amp;ICElementNum=0&amp;ICStateNum=7&amp;ICResubmit=1&amp;ICAJAX=1&amp;" style="width: 514px; height: 350px;"></iframe>

我尝试使用下面的xpath切换到框架:

要切换到框架的Xpath://div[@id='pt_modals']/div[2]/div/div[2]/iframe[contains(@src,'https://*******')]

切换后选择Xpath的选项:

driver.findElement(By.xpath("//table/tbody/tr[4]/td[1]")).click();

注意:我也尝试过javascript执行器。

js.executeScript("arguments[0].click();",driver.findElement(By.xpath("//table/tbody/tr[4]/td[1]")));

我刚构建了相同的DOM

<body class="PSPAGE" id="ptifrmtemplate" style="overflow: hidden;"><div id="ptpopupmask" style="display: none;">&nbsp;</div>

我希望它应该单击,但不会首先切换到框架。

2 个答案:

答案 0 :(得分:0)

尝试使用WebDriverWait

等待帧
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("ptModFrame_2")));

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//table/tbody/tr[4]/td[1]"))).click();

答案 1 :(得分:0)

要切换到所需的<iframe>,则必须诱使 WebDriverWait 使所需的框架可用并切换到,您可以使用以下任一方法Locator Strategies

  • xpath

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@id, 'ptModFrame_') and contains(@src, 'psc/umcssi2/EMPLOYEE/SA/c/SSR_PROG_ENRL.SSR_APT_REQ_RUNCNT.GBL')]")));
    
  • cssSelector

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[id^='ptModFrame_'][src*='psc/umcssi2/EMPLOYEE/SA/c/SSR_PROG_ENRL.SSR_APT_REQ_RUNCNT.GBL']")));