【问题标题】:Popup / Alert windows when working with Selenium C#使用 Selenium C# 时的弹出/警报窗口
【发布时间】:2020-09-06 17:04:45
【问题描述】:

在注册表上排序语句的程序,我无法转到他们的弹出窗口,selenium 没有看到正在创建任何新的。

在 Selenium (Chrome) 中是否可以通过 Xpath 而不使用到弹出窗口的转换、浏览器功能或其他方式来实现?

新增窗口检测功能:

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;
        }

这段代码本身:

//After this click of this element, a window opens:
//"Send request"
IWebElement PopWindowsstart =  ww.Until(ExpectedConditions.ElementIsVisible(By.XPath("/html/body/div[1]/div[6]/div[4]/div/div/section/div[2]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/div/div[1]/div/div/div/div[4]/div/div/div/div[1]/div/div/div/div[1]/div/div/span/span")));

//Search for a new window
string newWin = ClickAndSwitchWindow(PopWindowsstart, Browser, 2500);
PopupWindowFinder finder = new PopupWindowFinder(Browser);
//Switch to a new window
Browser.SwitchTo().Window(newWin);

//Statement Number:
IWebElement NumExctract = ww.Until(ExpectedConditions.ElementIsVisible(By.XPath("div[class='v-label v-label-tipFont tipFont v-label-undef-w'] b")));

//Read check
MessageBox.Show(NumExctract.Text);    

//"Continue work"
ww.Until(ExpectedConditions.ElementIsVisible(By.XPath("/html/body/div[7]/div/div/div/div[3]/div/div/div/div[1]/div/div/div/div[2]/div/div/div/div[1]/div/div/div/div[1]/div/div/span/span"))).Click();

//"Change"
ww.Until(ExpectedConditions.ElementIsVisible(By.XPath("/html/body/div[1]/div[6]/div[4]/div/div/section/div[2]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/div/div[2]/div/div/div/div[1]/div/div/div/div[2]/div/div/span/span"))).Click();

Thread.Sleep(300000);

键入窗口:

【问题讨论】:

    标签: c# selenium google-chrome selenium-webdriver popup


    【解决方案1】:

    试试:

    public static void PopUp()
    {
        _webDriver.SwitchTo().Alert().Accept();
    }
    

    【讨论】:

      【解决方案2】:

      让我们简化一下。

      如果您需要切换到弹出窗口,请尝试以下操作。

              public static string SwitchToPopup()
          {
              var mainHandle = Driver.CurrentWindowHandle;
              var handles = Driver.WindowHandles;
      
              foreach (var handle in handles)
              {
                  if (mainHandle == handle)
                  {
                      continue;
                  }
                  Driver.SwitchTo().Window(handle);
                  break;
              }
              var result = Url;
              return result;
      
          }
      

      当你需要切换回来时,使用:

          public static void GoToMainHandle()
          {
              var handles = Driver.WindowHandles;
              foreach (var handle in handles)
              {
                  Driver.SwitchTo().Window(handle);
                  break;
              }
          }
      

      话虽如此,您的 xpath 不是应该使用的东西。请查看https://www.w3schools.com/xml/xpath_intro.asp 并重写。当您使用 chrome 为您提供 xpath 时:

      ww.Until(ExpectedConditions.ElementIsVisible(By.XPath("/html/body/div[1]/div[6]/div[4]/div/div/section/div[2]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/div/div[2]/div/div/div/div[1]/div/div/div/div[2]/div/div/span/span"))).Click();
      

      如果您的开发人员在这里某处添加了一个 div,那么您的所有测试现在都将失败。如果您的开发人员没有提供唯一标识符,请与他们一起解决该问题。你应该有 id、类名等。

      【讨论】:

      • 谢谢,问题早解决了,一个小疏忽,没有注意到错误的xpath而不是css定位器。
      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2015-12-16
      • 1970-01-01
      相关资源
      最近更新 更多