Tag: webdriver

Selenium – C# – Webdriver – 无法找到元素

在C#中使用selen我正在尝试打开浏览器,导航到Google并找到文本搜索字段。 我试试下面的 IWebDriver driver = new InternetExplorerDriver(@”C:\”); driver.Navigate().GoToUrl(“www.google.com”); driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); IWebElement password = driver.FindElement(By.Id(“gbqfq”)); 但得到以下错误 – 无法找到id == gbqfq的元素

在C#中使用Selenium IE驱动程序快速发布大量文本(10,000行)

所以我现在正在编写这个脚本,它将使用C#中的Selenium Internet Explorer驱动程序自动完成一个简单,单调的任务。 一切都很好,但是在脚本的某一点上它有点慢,我想知道是否有更快的方法可以做我想要的。 问题在于我必须用大量信息填写文本框。 此文本框有时会填充多达10,000行,其中每行不超过20个字符。 但是,以下方法非常慢…… // process sample file using LINQ query var items = File.ReadAllLines(sampleFile).Select(a => a.Split(‘,’).First()); // Process the items to be what we want to add to the textbox var stringBuilder = new StringBuilder(); foreach (var item in items) { stringBuilder.Append(item + Environment.NewLine); } inputTextBox.SendKeys(stringBuilder.ToString()); 有没有只是将文本框的值设置为我想要的? 或者这是一个瓶颈? 感谢您的时间和耐心!

当我将Webdriver Firefox配置文件设置为默认下载所有文件时它无法正常工作

我设置firefox配置文件默认下载所有文件,但是当涉及到图像时,它弹出一个对话框,并告诉我天气保存或查看。 我使用的代码如下 var folderName = “temp”; var profile = new FirefoxProfile { EnableNativeEvents = true }; profile.SetPreference(“browser.download.folderList”, 2); profile.SetPreference(“browser.download.manager.showWhenStarting”, false); profile.SetPreference(“browser.download.dir”, folderName); profile.SetPreference(“browser.download.downloadDir”, folderName); profile.SetPreference(“browser.download.defaultFolder”, folderName); profile.SetPreference(“browser.helperApps.neverAsk.saveToDisk”, “application/all”); _webDriver = new FirefoxDriver(profile);

Selenium ChromeDriver – 在后台运行,但不是无头

我正在寻找一种在后台使用chrome驱动程序运行selenium测试的方法。 我的意思是背景,而不是前景聚焦窗口。 我实际上可以这样做,但是只要在Chrome驱动程序中发生打开新选项卡或在窗口之间切换(因此基本上切换窗口句柄)等操作,浏览器窗口就会被推到前台。 所以我的问题是,如果不运行测试无头,我怎样才能防止这种情况发生? 任何建议表示赞赏,可供讨论。 编辑 作为一个有点暂时的解决方案,我想出了以下内容。 使用Windows 10虚拟桌面function,我在一个单独的虚拟桌面上运行测试,从而运行Chrome浏览器窗口。 然后我切换回主虚拟桌面继续执行其他任务。 这可以防止Chrome浏览器窗口被强制到前台。 请注意,当出现上述任何操作时,这仍然会在任务栏中显示闪烁的chrome图标。 仍在寻找更加可靠的解决方案,因此任何建议仍然存在。 为了有希望打开新的观点和讨论点,最终解决方案,我将提供一些更详细的信息,说明我的代码在做什么。 我有5个镀铬网络驱动程序,每个这些网络驱动程序包含6个选项卡(WindowHandles)。 这个想法是必须在每个选项卡上连续重复某个过程。 因此,我们遍历每个webdriver,并在每个选项卡上的webdriver中,并将此选项卡设置为webdrivers当前的WindowHandle。 这使得chrome窗口可以明显切换到指定的选项卡。 在切换发生之后,对标签的内容进行基本的selenium自动化,之后我们重复整个过程。 实际问题似乎发生在chrome webdriver切换到新选项卡(WindowHandle)时,此时包含选项卡的chrome窗口被推到前台并窃取焦点。 请注意,这并不总是发生,通常它可以毫无问题地切换标签。 因此不清楚还有另一个因素会导致窗户偷走焦点。 编辑2 执行以下操作后: 我重载了selenium方法,该方法用于在标签(WindowHandles)之间切换,并且每次都调用SetWindoPos。 不幸的是,这也没有解决这个问题。 我将尝试更深入地了解可能导致此问题的原因,并将报告回来。 – S. Van den Wyngaert 我在运行测试时出去了几个小时,回过头来看,令人惊讶的是我还在我的主虚拟桌面上(win10function)。 这意味着在我离开期间没有发生这个问题。 我再次开始工作,打开了一个镀铬窗口,注意到我做完这个后不久,焦点被一个镀铬驱动器的窗口再次偷走了。 我从中得出的结论是,只有在打开另一个chrome窗口(未通过代码中的chrome驱动程序打开)时才会出现此问题。 我将继续调查,并将报告更新。 在调查此行为几个小时之后,我注意到当另一个镀铬窗口打开时,只要它具有焦点,就不会发生问题。 所以要快速总结一下: 在以下情况下不会发生此问题: 没有其他镀铬窗(不是selenium驱动)打开或最小化 另一个镀铬窗口(不是selenium驱动)打开并具有焦点 另一个运行全屏模式的应用程序有焦点 问题确实发生在: 另一个镀铬窗口(不是selenium驱动)打开,没有焦点 请注意,当我谈到另一个镀铬窗口时,我特别指的是不是由selenium驱动的镀铬窗口,因此用户打开了常规的镀铬窗口。

模拟枚举inheritance:最佳选择和实践

我正在设计一个测试应用程序(使用NUnit),它必须通过网页导航(通过Selenium Webdriver API)。 我想使用枚举来模拟站点结构,以便能够通过此枚举告诉方法导航的位置(尤其是NUnit方法)。 this.NavigateTo(Page.HomePage); 这是一个强烈的要求(在某处有一个枚举类型),主要是因为NUnit不能传递非基本类型。 例如,NUnit不可能使用这种语法,因为Page 必须是原始的或枚举的: static class Page{ public static Page HomePage; public static Page UserAccountPage; } /* … later … */ [TestCase(Page.HomePage)] void TestMethod(Page p) { … 我也想使用相同的enum-or-like来制作基本的inheritance,比如 interface IPage{} interface IPageNavigatable : Page {} interface IPageUserRelated : Page {} interface IWildcardPage : Page {} enum Page{ HomePage : IPageNavigatable, UserAccountPage […]

通过Options类或DesiredCapabilities禁用IE弹出窗口阻止程序

我知道这可以手动完成一次,方法是转到工具> Internet选项>隐私,然后取消选中打开弹出窗口阻止程序 。 问题是如果我在另一台机器上运行这些测试,与弹出窗口相关的测试将失败。 有没有办法使用Internet Explorer Options或DesireCapabilities来完成此任务。 我尝试过选项 var options = new InternetExplorerOptions { EnableNativeEvents = false }; options.EnsureCleanSession = true; options.UnexpectedAlertBehavior = InternetExplorerUnexpectedAlertBehavior.Dismiss; 我试过了 InternetExplorerUnexpectedAlertBehavior.Accept; 但是,没有奏效。 仍然阻止弹出窗口

WebDriver使用Dragula在应用程序中拖放

我的公司有一个新的应用程序,包含拖放。 拖放是通过Dragula库完成的。 我正在尝试自动执行此function,但我没有运气。 我已经尝试了两个WebDriver内置的DragAndDrop()方法(我的理解是它通常不能与现代Web技术很好地工作)。 我尝试使用Actions构建自己的Drag and Drop。 我也尝试在javascript执行器中使用jquery。 这两种方法都没有奏效。 有人有什么建议吗?

无法加载类型’OpenQA.Selenium.Chrome.ChromeDriver’

使用WebDriver for .NET4.0 我运行程序时遇到TypeLoadException。 消息是: Could not load type ‘OpenQA.Selenium.Chrome.ChromeDriver’ from assembly ‘WebDriver, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’.”:”OpenQA.Selenium.Chrome.ChromeDriver” 我的代码是单行… IWebDriver driver = new ChromeDriver(@”C:\webdriver”); //chomedriver.exe is in this 目录。 我使用的是最新版本2.33.0。 添加了对webdriver和webdriver.support的引用。 使用OpenQA.Selenium; 使用OpenQA.Selenium.Chrome; 还尝试了非客户端4框架目标,没有任何改进。

使用Selenium使用Webdriver的Timeout的最佳方法是什么?

我遇到了一个问题。 我的网页有一个DropDownList控件。 一旦DropDownList值改变(通过选择不同的值),页面将刷新并呈现内容。 然后我必须使用Thread.Sleep(2000); 在它和FindElement之前。 我的问题:等待页面加载的最佳方法是什么? 我的代码中有很多Thread.Sleep(2000)实例,我开始认为这不是解决问题的最佳方法。 这是我的代码: [TestInitialize()] public void Setup() { if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.IE)) { driver = new InternetExplorerDriver(); } else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.CHROME)) { //driver = new ChromeDriver(); } else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.FIREFOX)) { driver = new FirefoxDriver(); } } 第二部分: [TestMethod] public void testVerifyData() { // ………………. // ………………. driver.FindElement(By.XPath(“//*[@id=’ctl00_NavigationControl1_lnke’]”)).Click(); Thread.Sleep(2000); //select from the […]

Html Agility Pack无法使用xpath查找列表选项

这与我之前的问题有关 ,但似乎我有另一个案例,其中Html Agility Pack无法按预期工作。 这是Html(删除了必需品,删除了敏感信息): Frarma Express Maderas Garcia Miaris, SA Ricoh Panama UNO EXPRESS Garrett Blaser Gretsch Oriel Antonio Grau 这是代码: const string xpath = “//*[contains(@id, ‘one-time-payment-form:vendor-select-‘)]/option[contains(text(), ‘UNO EXPRESS’)]”; var driver = new FirefoxDriver(new FirefoxProfile()) { Url = “PATH_TO_FILE_CONTAINING_HTML_SHOWN_ABOVE” }; Thread.Sleep(2000); //Can WebDriver find it? var e = driver.FindElementByXPath(xpath); Console.WriteLine(e!=null ? “WebDriver success” : […]