На странице PeopleSoft, если я нажму на поиск, появится новый виджет, мне нужно выбрать один из вариантов.
DOM был разработан таким образом, что в теге body есть «style = «overflow: hidden;»», с помощью приведенного ниже xpath я могу идентифицировать фрейм в google chrome, однако я не мог переключиться на фрейм и нажмите на опцию, которую мне нужно выбрать
HTML iframe:
<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>
Я ожидаю, что он должен щелкнуть, но в первую очередь он не переключается на кадр.
Этот DOM довольно большой, могу ли я поделиться форматом
Вам не нужно делиться всем DOM, возможно, будет достаточно HTML, охватывающего тег <iframe> / <frame> и нужный элемент вместе с его родительским тегом.




Попробуйте дождаться кадра, используя 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();
Спасибо за ответ, он также работает после переключения на содержимое по умолчанию, driver.switchTo().defaultContent();
Чтобы переключиться на желаемый <iframe>, вам нужно вызвать WebDriverWait для желаемого кадр должен быть доступен и переключиться на него, и вы можете использовать любой из Стратегии поиска:
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')]")));
cssселектор:
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']")));
Поделитесь html с фреймом и своим кодом