Как переключиться на кадр, когда тег body скрыт с помощью style = "overflow: hidden;" - PullRequest
0 голосов
/ 26 марта 2019

На странице 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&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 голосов
/ 27 марта 2019

Чтобы переключиться на желаемый <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')]")));
    
  • 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']")));
    
0 голосов
/ 27 марта 2019

Попробуйте подождать кадр, используя 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();
...