在Selenium中切换Windows和查找页面对象

时间:2017-03-23 13:59:22

标签: c# windows selenium pageobjects

我有一个自动脚本,它使用Selenium和页面对象模型以及C#绑定,并且需要运行两个窗口。该网站也在Angular 2中完成。需要发生的是每个窗口需要被带到某个点,然后在两个窗口中快速连续点击一个按钮。使用Selenium网格从两个单独的实例生成单独的窗口。窗口出现就好了,第一个开关(当它产生时切换到第二个窗口)无缝地发生

以下是生成每个窗口的代码

窗口1:

//start up the browser and initialize any test variables
driver1 = InitializeTestObjects(testID, true, true);
winHandle1 = driver1.CurrentWindowHandle;

窗口2:

//second browser
driver2 = InitializeTestObjects(testID, false, true);
winHandle2 = driver2.CurrentWindowHandle;

其中winHandle1和winHandle2是每个窗口的当前句柄,并在生成后立即抓取

随着脚本逐步完成。它将从页面对象类加载页面对象。以下是加载页面对象的脚本代码:

mt2 = new MissionTab(driver2);
mt2.clickAutomate();

那个页面对象类

public class MissionTab : HomePage
{
    public MissionTab(IWebDriver driver)
        : base(driver)
    {
        PageFactory.InitElements(driver, this);
    }

    #region Page Objects

    //private NgWebElement btnOpen = angDriver.FindElement(By.XPath("//*[@id='sts-mission-view-card-footer']/div/div/button[1]"));
    private IWebElement btnAutomate = driver.FindElement(By.XPath("//*[@id='sts-mission-view-card-footer']/div/div/button[2]"));
    private IWebElement chkAutoRefresh = driver.FindElement(By.XPath("//*[@id='sts-mission-view-card-header']/sts-card-header/div/div[2]/div/div/div[1]/div[2]/md-checkbox"));
    private IWebElement tblTaskList = driver.FindElement(By.Id("sts-mission-view-card-content"));

    #endregion
    #region Page Methods
    #endregion
    }
}

这是我看到的行为。在脚本期间的某个时刻,当我有两个窗口到我需要点击被测试的按钮时,我在切换回我不使用的窗口后得到NoSuchElement异常。这是代码:

//switch back to first window
driver1.SwitchTo().Window(winHandle1)

//load home page object and click the Automate button
mt1 = new MissionTab(driver1);
mt1.clickAutomate();

但奇怪的是,如果我只是尝试在我的脚本中使用虚拟IWebElement单独添加我需要的元素,它就可以正常工作。这是完成上述相同操作的代码。 switchTo切换回原始文件,但它不会识别(找到)任何页面对象。使用虚拟元素,我可以找到对象并毫无问题地对它们采取行动,我甚至不需要switchTo()语句。

//find the Automate button and click 
IWebElement ele = driver1.FindElement(By.XPath("//*[@id='sts-mission-view-card-footer']/div/div/button[2]"));
ele.Click();

为什么会这样?有人注意到了吗?

0 个答案:

没有答案