代码之家  ›  专栏  ›  技术社区  ›  Sachith Wickramaarachchi

Selenium ChromeDriver在发布后不导航URL

  •  0
  • Sachith Wickramaarachchi  · 技术社区  · 7 年前

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            try
            {
                AppSettingsReader configReader = new AppSettingsReader();
                using (var driver = new ChromeDriver(HostingEnvironment.ApplicationPhysicalPath)) //here I used latest chrome driver(V 2.42.59)
                {
                    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
                    //driver.Manage().Timeouts().PageLoad = TimeSpan.FromMinutes(2);
    
                    driver.Url = "https://crims.crib.lk";
                    var userNameField = driver.FindElementById("txtUserName");
                    var userPasswordField = driver.FindElementById("txtPassword");
                    driver.Quit();
                }
            }
            catch (Exception ex)
            {
                Logger.LogWriter(" WebApplication2.Controllers", ex, "HomeController", "Index");
            }
    
            return View();
        }
    }
    

    Source :WebApplication2
    Module:HomeController
    Method:Index
    Message :no such element: Unable to locate element:
    {"method":"id","selector":"txtUserName"}
      (Session info: chrome=69.0.3497.100)
      (Driver info: chromedriver=2.42.591088
    (7b2b2dca23cca0862f674758c9a3933e685c27d5),platform=Windows NT
    6.2.9200 x86_64)
    StackTrace :   at
    OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response
    errorResponse)
    

    当浏览器不能正确导航到URL时,在VS中也发生了同样的错误。如何解决这个问题。请注意,我成功地安装了以下NuGet包。我正在windows server 2012 PC上工作。我在应用程序上托管了自己的IIS

    NuGet Packages: RC | WebDriver | WebDriverBackedSelenium | Support
    

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Aman B    7 年前

    这可能有多种原因。您需要实现等待和轮询机制

    这是一种方法:

    var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 60));
    var element = wait.Until(condition =>
    {
        try
        {
            var elementToBeDisplayed = driver.FindElement(By.Id("content-section"));
            return elementToBeDisplayed.Displayed;
        }
        catch (StaleElementReferenceException)
        {
            return false;
        }
        catch (NoSuchElementException)
        {
            return false;
        }
    });
    

    您还可以使用FluentWait命令和ExpectedConditions示例 link