尝试在c#中使用selenium webdriver编写一些测试用例,并且有一个我不确定如何解决的场景
用户场景正在搜索患者的表格,选择患者然后打开一个新窗口,然后在窗口上断言各种项目
我的问题是我无法选择新窗口来断言任何内容,它不是一个弹出窗口,它是一个全新的浏览器窗口,但它没有窗口标题/名称来识别它,我怎么会能够将驱动程序焦点切换到此窗口吗?
提前致谢
答案 0 :(得分:15)
Selenium WebDriver非常简单。通过使用SwitchTo方法
driver.SwitchTo().Window(driver.WindowHandles.Last());
请参阅此博客文章
http://binaryclips.com/2015/03/13/selenium-webdriver-in-c-switch-to-new-window/
答案 1 :(得分:0)
如果我正确收集,您的应用程序将自行生成窗口而无需进一步的用户干预。您应该能够等待页面加载,然后您可以正常调用您的断言。
Selenium已经有了你的浏览器会话,所以新窗口不是selenium的问题,它只是新内容。
答案 2 :(得分:0)
foreach (string defwindow in driver.WindowHandles)
{
driver.SwitchTo().Window(defwindow);
if(driver.Title == "")
{
selenium.WindowFocus();
selenium.SelectWindow("");
}
}
“” - 表示您的窗口标题
答案 3 :(得分:0)
我有一些您可能喜欢的代码。最快的解决方案是使用Popup Finder,但我也制作了自己的方法。我永远不会依赖Window Handles所在的顺序来选择合适的窗口。 弹出窗口查找器:
PopupWindowFinder finder = new PopupWindowFinder(driver);
driver.SwitchTo().Window(newWin);
我的自定义方法。基本上你传递了你想要点击的元素,你的webdriver,以及你点击元素后搜索之前等待的时间。
它会获取所有当前句柄并生成一个列表。它使用该列表来消除以前存在的窗口意外切换到。然后单击启动新窗口的元素。点击后应始终存在某种延迟,因为没有立即发生。然后它创建一个新列表并将其与旧列表进行比较,直到找到新窗口或循环到期为止。如果找不到新窗口,它将返回null,因此如果你有一个并不总是有效的iffy webelement,你可以进行空检查,看看交换机是否有效。
public static string ClickAndSwitchWindow(IWebElement elementToBeClicked,
IWebDriver driver, int timer = 2000)
{
System.Collections.Generic.List<string> previousHandles = new
System.Collections.Generic.List<string>();
System.Collections.Generic.List<string> currentHandles = new
System.Collections.Generic.List<string>();
previousHandles.AddRange(driver.WindowHandles);
elementToBeClicked.Click();
Thread.Sleep(timer);
for (int i = 0; i < 20; i++)
{
currentHandles.Clear();
currentHandles.AddRange(driver.WindowHandles);
foreach (string s in previousHandles)
{
currentHandles.RemoveAll(p => p == s);
}
if (currentHandles.Count == 1)
{
driver.SwitchTo().Window(currentHandles[0]);
Thread.Sleep(100);
return currentHandles[0];
}
else
{
Thread.Sleep(500);
}
}
return null;
}
答案 4 :(得分:0)
这段代码对我有用。在我的情况下,新的窗口/选项卡是一个有一些重量的PDF,所以我在加载时做了一些自定义等待。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
int previousWinCount = driver.WindowHandles.Count;
// Perform the action to open a new Window
wait.Until(driver => driver.WindowHandles.Count == (previousWinCount + 1));
driver.SwitchTo().Window(driver.WindowHandles.Last());
wait.Until(driver => driver.Url.Contains("desired_url_or_a_substring_of_it"));
请注意,加载PDF时 driver.Url 为“about:blank”。
答案 5 :(得分:0)
IWebDriver _driver = new FirefoxDriver();
_driver.Navigate().GoToUrl("https://www.google.com");
ReadOnlyCollection<string> WindowHandles = _driver.WindowHandles;
foreach (string item in WindowHandles)
{
_driver.SwitchTo().Window(item);
string browserTitle = _driver.Title;
string browserPageSource = _driver.PageSource;
string browserURL = _driver.Url;
}
使用ReadOnlyCollection并处理浏览器,获取窗口的标题,进行比较并集中精力于所需的浏览器窗口。