在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&ICElementNum=0&ICStateNum=7&ICResubmit=1&ICAJAX=1&" 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;"> </div>
我希望它应该单击,但不会首先切换到框架。
答案 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']")));