Кнопка в ChromeDriver под Selenium не принимает нажатия - PullRequest
0 голосов
/ 24 марта 2020

Я использую селен, используя следующие пакеты nuGet (DotNetSeleniumExtras.WaitHelpers.3.11.0 NUnit.3.12.0 NUnit3TestAdapter.3.16.1 Selenium.Support.3.141.0 Selenium.WebDriver.3.141.0). Я работаю на windows с использованием Chrome (версия 80.0.3987.132 (официальная сборка) (64-разрядная версия))

На сегодняшний день все работает, за исключением нескольких проблем с синхронизацией. Однако кнопка, как описано ниже, отказывается принимать любой щелчок.

<mat-card-actions _ngcontent-frq-c15="" class="mat-card-actions" style="margin-top: 3rem">
<button _ngcontent-frq-c15="" color="primary" mat-raised-button="" type="submit" class="mat-raised-button mat-button-base mat-primary" ng-reflect-color="primary"><span class="mat-button-wrapper">Submit</span>
    <div class="mat-button-ripple mat-ripple" matripple="" ng-reflect-centered="false" ng-reflect-disabled="false" ng-reflect-trigger="[object HTMLButtonElement]"></div>
    <div class="mat-button-focus-overlay"></div>
</button>
<button _ngcontent-frq-c15="" mat-stroked-button="" type="reset" class="mat-stroked-button mat-button-base"><span class="mat-button-wrapper">Clear</span>
    <div class="mat-button-ripple mat-ripple" matripple="" ng-reflect-centered="false" ng-reflect-disabled="false" ng-reflect-trigger="[object HTMLButtonElement]"></div>
    <div class="mat-button-focus-overlay"></div>
</button>

Я пробовал все с точки зрения кода, см. Ниже

 string[] selectors =
  {
    ".mat-card-actions .mat-raised-button", ".mat-card-actions .mat-primary",
    ".mat-card-actions .mat-button-wrapper", ".mat-card-actions .mat-button-ripple"
  };
  //
  // string[] selectors = {".mat-card-actions .mat-raised-button"};
  foreach (string selector in selectors)
  {
    IWebElement submitButton = _driver.FindElement(By.CssSelector(selector));
    submitButton.Click();

    try
    {
      submitButton.SendKeys(Keys.Space);
      submitButton.SendKeys(Keys.Return);
    }
    catch (Exception ex)
    {
      log.Error(ex.Message);
    }

    // This doesn't work
    // Configure the Action
    Actions action = new Actions(_driver);
    action.MoveToElement(submitButton).Perform();
    action.MoveToElement(submitButton).Click().Perform();


    // This doesn't work
    var executor = (IJavaScriptExecutor) _driver;
    executor.ExecuteScript("arguments[0].click();", submitButton);

    executor.ExecuteScript("document.querySelector(\".mat-raised-button\").click()");
  }

Ни один из эти работы. Затем я заметил, что выполнение следующего javascript в окне консоли chrome не работает.

document.querySelector(\".mat-raised-button\").click()"

Однако это прекрасно работает в Chrome экземплярах, которые не управляются Selenium. Это проблема Chrome / Selenium или C#? Все остальные нажатия кнопок работают нормально в тестируемом приложении. Я потерял 2 дня в этом вопросе, поэтому любая помощь будет признательна.

Спасибо,

Джон

1 Ответ

0 голосов
/ 26 марта 2020

Woohoo, мы решили это. На странице есть три карты (Компания, Пользователь и Сайт). В нашей бизнес логике c есть возможность использовать те же данные для Компании, что и для Сайта, поскольку они очень похожи, за исключением одного поля. При разработке разработчик повторно использовал один и тот же валидатор для формы (компании) в области сайта. Это означало, что это поле проверялось на Сайте, но его не было, поэтому проверка не прошла. Тем не менее, поскольку в пользовательском интерфейсе не было поля, сообщение о сбое проверки не было видно.

Надеемся, что в будущем это сэкономит людям время, этот тип ошибки может занять часы командного времени. Я бы увидел хорошее дополнение к Angular, если бы консольное предупреждение не было видно пользователю.

...