使用Uris的多线程C#Selenium WebDriver自动化事先未知

时间:2015-07-27 13:27:06

标签: c# multithreading selenium-webdriver webautomation

我需要同时执行一些webdrivers操作,但我不确定如何执行此操作。

我在这里问的是:

  1. 实现这个目标的正确方法是什么?
  2. 我得到的例外情况是什么原因(见下文)
  3. 经过一些研究后,我最终得到了:

    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()

0 个答案:

没有答案