2

我正在努力使仅在 IE 中工作的应用程序自动化。

步骤是: 1. 转到特定页面并单击搜索按钮。2. 搜索按钮打开一个新的模态弹出窗口 3. 我在弹出窗口中选择了一个公司名称,它关闭弹出窗口并在父窗口中填充所选公司的详细信息。

但是因为没有办法在 IE 中使用 selenium 处理 Modal pop,所以我明确使用了:

                   ((JavascriptExecutor) driver).executeScript("window.showModalDialog =window.open;");

问题是:当 modaldialog 通过我的代码作为窗口打开并且我选择公司时,它会关闭但它不会在父窗口中填充详细信息。

这是打开弹出窗口的按钮的 HTML:

        <input id="ctl00_cphMain_ucCustomer_ctlModalBuyerCompany_btnModal"  class="FormButton" type="submit" onclick="javascript:ModalCallerCtl_Popup('ctl00_cphMain_ucCustomer_ctlModalBuyerCompany','Please+specify+a+Buyer+Company',1200, 700,'btnModal'); return true;" value="..." name="ctl00$cphMain$ucCustomer$ctlModalBuyerCompany$btnModal">

这是我单击以选择公司名称并关闭弹出窗口的元素的 HTML:

         <tr id="SearchxresultsGrid_r_8" level="8" style="height:21px;">
            <td id="SearchxresultsGrid_rc_8_0" class="ig_6cb4695_r1 GridRow UltraWebGridRow ig_6cb4695_rc11 FormGridCellText" onmousedown="return igtbl_cancelEvent(event);">
            <nobr>
            <input class="ig_6cb4695_rcb1112 SelectionSearch btnOpenSite" type="button" tabindex="-1" onclick="igtbl_colButtonClick(event,'SearchxresultsGrid',null, igtbl_srcElement(event));" value="" style="">
            </nobr>

我正在遍历窗口并采取行动:

                        while(i.hasNext())
                    {
                        String child = i.next();
                        if(child!=parent_wnd){
                            System.out.println(" Child window -----  " + child);

                            driver.switchTo().window(child);

                            driver.switchTo().frame("ifrContent");
                            WebElement SearchBtn = driver.findElement(By.xpath(".//*[@id='Search_GoButton']"));

                            SearchBtn.click();

                            Thread.sleep(90000);
                            util.jsJqWait(driver);
                            wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".//*[@id='Search_FieldSelect0_txtValue1']")));


                            /*WebElement txtbox = driver.findElement(By.xpath(".//*[@id='Search_FieldSelect0_txtValue1']"));

                            txtbox.sendKeys("PHD");
                            */


                            //WebElement btn = driver.findElement(By.id("SearchxresultsGrid_rc_8_0"));


                            WebElement company_PHD= driver.findElement(By.xpath("//td[@id='SearchxresultsGrid_rc_8_0']/nobr/input"));

                            //executor.executeScript("var a = document.evaluate(\"//td[@id='SearchxresultsGrid_rc_8_0']/nobr/input\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; return a.onclick=\"igtbl_colButtonClick(event,'SearchxresultsGrid',null, igtbl_srcElement(event))\";");

                            //executor.executeScript("return document.evaluate(\"//td[@id='SearchxresultsGrid_rc_8_0']/nobr/input\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();");

                            executor.executeScript("var a = document.evaluate(\"//td[@id='SearchxresultsGrid_rc_8_0']/nobr/input\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; return a.onclick='WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(\"Search$GoButton\", \"\", true, \"\", \"\", false, false)';");


                            //executor.executeScript("window.addEventListener(\".\"), function('igtbl_colButtonClick(event,'SearchxresultsGrid',null, igtbl_srcElement(event))');");
                            util.safeJavaScriptClick(company_PHD, driver);

                            //executor.executeScript("window.opener.igtbl_colButtonClick(event,'SearchxresultsGrid',null, igtbl_srcElement(event));");

                            //executor.executeScript("jQuery('#company_PHD').click()");

                            //executor.executeScript(" return window.opener.postmessage(\"return document.evaluate(\"//td[@id='SearchxresultsGrid_rc_8_0']/nobr/input\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();\")");

                        }

                        driver.switchTo().window(parent_wnd);

                    }

忽略代码。它需要重构,因为我只是在检查自动化应用程序的可行性。

任何建议或建议都会有所帮助。我正在寻找的是在 selenium 中使用 JS 在单击时将数据从子窗口发送到父窗口的一些显式方式/代码。我不确定 window.opener 和 postmessage 的用法,因此需要 JS 部分的帮助。

4

0 回答 0