我目前正在维护使用硒和specflow进行测试的解决方案,并且我正在顺畅地并行运行所有内容,并在浏览器(chrome)窗口之间共享了一个单独的webdriver。
但是现在我不得不添加一些涉及在帧之间进行切换的场景,并且由于找不到元素或iframe,因此并行运行时测试开始随机中断。
有人遇到过这个问题,知道解决这个问题的好方法吗?
编辑:一些代码 这是我用来设置测试运行的班级中的
private readonly IObjectContainer objectContainer;
private ChromeWebDriver chromeWebDriver;
public TestSetup(IObjectContainer container)
{
this.objectContainer = container;
}
[BeforeScenario]
public void SetUp()
{
chromeWebDriver = new ChromeWebDriver();
objectContainer.RegisterInstanceAs<ChromeWebDriver>(chromeWebDriver);
}
然后在步骤文件中,我将在构造函数中初始化Webdriver
private readonly IWebDriver driver;
public LoginSteps(ChromeWebDriver chromeWebDriver)
{
this.driver = chromeWebDriver.WebDriver;
}
答案 0 :(得分:0)
@ Dayan54-请查看以下内容。我在SpecFlow中运行4-6个线程,并且iFrames没有问题。也许这会有所帮助。
我也看到了这一点,所以我不得不问。在某些iFrame中,例如说FaceBook或InstaGram的社交媒体登录,当您登录时,它会自动关闭iFrame。然后,这将对您执行的其他任何操作产生错误,因为如果尝试将其关闭,则会收到错误消息,因为该错误已被关闭。切换到主要内容将失败,因为您已经在那里。为此,我编写了“ GoToMainHandle”方法。
//switch to the iframe name -
public static void SwitchToIframe(string frameName)
{
try
{
Driver.SwitchTo().Frame(frameName);
}
catch (NoSuchFrameException)
{
try
{
Driver.SwitchTo().Frame(frameName);
}
catch (NoSuchFrameException)
{
Console.WriteLine("Could not switch to IFrame");
throw;
}
}
}
//going back to main content when completed with iframe
public static void SwitchToMainContent()
{
Driver.SwitchTo().DefaultContent();
}
//If the iframe closes automatically, you still need to get back to the main window
public static void GoToMainHandle()
{
var handles = Driver.WindowHandles;
foreach (var handle in handles)
{
Driver.SwitchTo().Window(handle);
break;
}
}