• <small id='qGn0f'></small><noframes id='qGn0f'>

  • <i id='qGn0f'><tr id='qGn0f'><dt id='qGn0f'><q id='qGn0f'><span id='qGn0f'><b id='qGn0f'><form id='qGn0f'><ins id='qGn0f'></ins><ul id='qGn0f'></ul><sub id='qGn0f'></sub></form><legend id='qGn0f'></legend><bdo id='qGn0f'><pre id='qGn0f'><center id='qGn0f'></center></pre></bdo></b><th id='qGn0f'></th></span></q></dt></tr></i><div id='qGn0f'><tfoot id='qGn0f'></tfoot><dl id='qGn0f'><fieldset id='qGn0f'></fieldset></dl></div>
    1. <tfoot id='qGn0f'></tfoot>

        • <bdo id='qGn0f'></bdo><ul id='qGn0f'></ul>
        <legend id='qGn0f'><style id='qGn0f'><dir id='qGn0f'><q id='qGn0f'></q></dir></style></legend>

      1. Selenium 在并行运行测试时处理 ProtocolHandshake 错误

        时间:2023-10-01
      2. <legend id='m9mzI'><style id='m9mzI'><dir id='m9mzI'><q id='m9mzI'></q></dir></style></legend>
          <bdo id='m9mzI'></bdo><ul id='m9mzI'></ul>
          <i id='m9mzI'><tr id='m9mzI'><dt id='m9mzI'><q id='m9mzI'><span id='m9mzI'><b id='m9mzI'><form id='m9mzI'><ins id='m9mzI'></ins><ul id='m9mzI'></ul><sub id='m9mzI'></sub></form><legend id='m9mzI'></legend><bdo id='m9mzI'><pre id='m9mzI'><center id='m9mzI'></center></pre></bdo></b><th id='m9mzI'></th></span></q></dt></tr></i><div id='m9mzI'><tfoot id='m9mzI'></tfoot><dl id='m9mzI'><fieldset id='m9mzI'></fieldset></dl></div>

                <tbody id='m9mzI'></tbody>

            1. <tfoot id='m9mzI'></tfoot>

              <small id='m9mzI'></small><noframes id='m9mzI'>

                • 本文介绍了Selenium 在并行运行测试时处理 ProtocolHandshake 错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我尝试练习使用 TestNG invocationCountthreadPoolSize 并行执行测试.

                  I try practicing to execute tests in parallel using TestNG invocationCount and threadPoolSize.

                  A.我这样写了一个一体机测试,成功了

                  A. I write a all-in-one test like this, and it is successful

                  @Test(invocationCount = 5, threadPoolSize = 5)
                  public void testThreadPool() {        
                      WebDriver driver = new ChromeDriver();
                      driver.get("http://www.google.com");
                      driver.findElement(By.name("q")).sendKeys("Amazon");
                      driver.quit();*/        
                  }
                  

                  =>5个Chrome浏览器同时打开(并行),测试成功.

                  => 5 Chrome browsers are opened at the same time (parallel), and tests are successfully executed.

                  B.我在@before 和@after 中定义了我的测试,但它不起作用

                  B. I define my test in @before and @after, and it doesn't work

                  @BeforeTest
                  public void setUp() {
                     WebDriver driver = driverManager.setupDriver("chrome");
                  }
                  
                  @Test(invocationCount = 5, threadPoolSize = 5)
                  public void testThreadPool() {    
                      driver.get("http://www.google.com");
                      driver.findElement(By.name("q")).sendKeys("Amazon");            
                  }
                  
                  @AfterTest
                  public void tearDown() {
                     driver.quit()
                  }
                  

                  =>打开1个chrome浏览器,好像刷新了5次,最后在文本字段中输入了5个亚马逊词,日志信息如下:

                  => 1 chrome browser is opened, and it seems it is refreshed 5 times, and at the end, there are 5 Amazon words entered in text field, with the following log message:

                  [1593594530,792][SEVERE]: bind() failed: Cannot assign requested address (99)
                  ChromeDriver was started successfully.
                  Jul 01, 2020 11:08:51 AM org.openqa.selenium.remote.ProtocolHandshake createSession
                  

                  我知道,对于 B,5 个线程使用相同的对象驱动程序,这就是为什么只打开一个 chrome.但我不知道在这种情况下如何管理驱动程序对象,因此我可以获得与 A 中相同的结果.

                  I understand that, with B, 5 threads use the same object driver, that's why only one chrome is opened. But I don't know how to manage driver object in this case so I can get the same result like in A.

                  任何想法表示赞赏.

                  推荐答案

                  你可以使用 ThreadLocal 类来让你的 webdriver 线程安全

                  You can use ThreadLocal class to make your webdriver Threadsafe

                  private ThreadLocal<WebDriver> webdriver = new ThreadLocal<WebDriver>();
                  
                     @BeforeMethod
                      public void setUp() {
                         webdriver.set(driverManager.setupDriver("chrome"));
                      }
                      
                      @Test(invocationCount = 5, threadPoolSize = 5)
                      public void testThreadPool() {    
                          webdriver.get().get("http://www.google.com");
                          webdriver.get().findElement(By.name("q")).sendKeys("Amazon");            
                      }
                      
                      @AfterMethod
                      public void tearDown() {
                         webdriver.get().quit()
                      }
                  

                  您需要在上述上下文中使用 BeforeMethod/AfterMethod.

                  Edit : You will need to use BeforeMethod/AfterMethod in above context.

                  这篇关于Selenium 在并行运行测试时处理 ProtocolHandshake 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:Selenium:如何通过 executeScript() 发送可变字符串 下一篇:在 Selenium 中为每个元素使用多个定位器的优缺点

                  相关文章

                  最新文章

                    <i id='FWTML'><tr id='FWTML'><dt id='FWTML'><q id='FWTML'><span id='FWTML'><b id='FWTML'><form id='FWTML'><ins id='FWTML'></ins><ul id='FWTML'></ul><sub id='FWTML'></sub></form><legend id='FWTML'></legend><bdo id='FWTML'><pre id='FWTML'><center id='FWTML'></center></pre></bdo></b><th id='FWTML'></th></span></q></dt></tr></i><div id='FWTML'><tfoot id='FWTML'></tfoot><dl id='FWTML'><fieldset id='FWTML'></fieldset></dl></div>
                      <bdo id='FWTML'></bdo><ul id='FWTML'></ul>

                    <tfoot id='FWTML'></tfoot>

                    <small id='FWTML'></small><noframes id='FWTML'>

                      <legend id='FWTML'><style id='FWTML'><dir id='FWTML'><q id='FWTML'></q></dir></style></legend>