我需要同时执行一些webdrivers操作,但我不确定如何执行此操作。
我在这里问的是:
1 即可。我看到人们这样做的方式(以及我在使用API之后最终使用的那个,在搜索之前)是循环遍历我的WebDriver手头的窗口句柄,并执行切换到窗口句柄我想要的处理,在我完成时关闭它。
2 即可。 Selenium Grid似乎不是我的选择 - 我错了还是打算并行处理?由于我在一台计算机上运行所有东西,对我来说没用。
在尝试第一个选项时,我有以下场景(下面有一个代码示例,我跳过了不相关的东西/重复本身(我在哪里添加了3个点:
我有一个html页面,有几个提交按钮,堆叠。
点击它们将打开一个新的浏览器/标签(有趣的是,使用ChromeDriver打开标签,而FirefoxDriver为每个标签打开单独的窗口。)
作为旁注:我无法预先确定每个提交的uris(它们必须由javascript确定,此时,我们假设我想处理对客户端代码一无所知的所有内容。
现在,在遍历所有提交按钮并在相应元素上发出webElement.Click()之后,选项卡/窗口将打开。代码流程创建一个要执行的任务列表,每个新选项卡/窗口都有一个。
问题是:由于所有任务都依赖于同一个webdriver实例切换到窗口句柄,似乎我需要添加资源共享锁/控件。我不确定我是否正确,因为我在搜索多线程Web驱动程序示例时没有看到锁/资源访问控制。
另一方面,如果我能够事先确定标签/窗口uris,我将能够跳过达到这一点所需的所有自动化步骤,然后通过{{为每个线程创建webDriver实例1}}会很简单。但这看起来像一个僵局!我没有看到webDriver的API提供对新打开的选项卡/窗口的任何访问而不执行切换。如果我不必重复所有导致我进入当前窗口的自动化步骤,我只想切换!
...
无论如何,我一直得到例外:
Navigate().GoToUrl()
at
Element belongs to a different frame than the current one - switch to its containing frame to use it
在IWebElement element = cell.FindElement
区块内。
我显然已经检查过所有选择器都在chrome的控制台中返回结果。
ToDictionary()