«Сообщение = неизвестная ошибка: невозможно сфокусировать элемент» при выполнении тестов через Selenium, ChromeDriver и Chrome - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь отправить ключ для выпадающего списка в браузере Google Chrome, но получаю эту ошибку

OpenQA.Selenium.WebDriverException
  HResult=0x80131500
  Message=unknown error: cannot focus element
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.17134 x86_64)
  Source=WebDriver
  StackTrace:
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.SendKeys(String text)
   at BnI.UITests.Register.TheOfficialInfoValidTest() in C:\Users\me\UITests\Register.cs:line 382

Это мой метод:

driver.FindElement(By.XPath("(.//*[normalize-space(text()) and normalize-space(.)='Country:'])[1]/following::span[2]")).SendKeys("USA");

Вот как это выглядит в html:

<div _ngcontent-c4="" class="col-xs-8 no-padding-sides ng-star-inserted" style="">
   <kendo-dropdownlist _ngcontent-c4="" class="custom-dropdown k-widget k-dropdown k-header ng-pristine ng-invalid ng-touched" formcontrolname="countryId" dir="ltr">
      <span role="listbox" unselectable="on" class="k-dropdown-wrap k-state-default" id="k-d0697a91-baeb-4960-bfc1-c023903c1159" dir="ltr" readonly="false" tabindex="0" aria-disabled="false" aria-readonly="false" aria-haspopup="true" aria-expanded="false" aria-owns="dbfc0894-a4f5-4f1b-881f-1d88ccdc6002" aria-activedescendant="f65cbfa2-6280-4a84-908b-ba11da75d59d-undefined">
         <span unselectable="on" class="k-input">
            <!----><!---->Select Country ...
         </span>
         <span unselectable="on" class="k-select"><span class="k-i-arrow-s k-icon"></span></span><!---->
      </span>
      <!----><!---->
   </kendo-dropdownlist>
</div>

Это XPath:

xpath=(.//*[normalize-space(text()) and normalize-space(.)='Country:'])[1]/following::span[2]

Вот так выглядит значение выпадающего списка, если я хочу щелкнуть по нему с помощью IDE Селена, поскольку это значение извлекается из базы данных:

  1. Сначала я нажал на выпадающий список
  2. Второй я выбрал страну

enter image description here

Есть ли другой способ добавить значение с помощью клавиатуры в селене вместо клавиши отправки?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018
Actions actions = new Actions(WebdriverName);
actions.moveToElement(locator).click();

Вы можете использовать библиотеку действий для решения проблемы.moveToElement позволяет элементу быть сфокусированным веб-драйвером.Также при создании имени драйвера создайте метод ожидания с ExpectedCondition.

WebDriverWait wait = new WebDriverWait(WebdriverName, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.tagName(locator)));
0 голосов
/ 27 августа 2018

Согласно HTML, которым вы поделились, целевой элемент является тегом <span>, поэтому вы не сможете вызвать метод SendKeys().Вместо этого вам нужно вызвать WebDriverWait , чтобы требуемый элемент был кликабельным, и вы можете использовать любое из следующих решений:

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//span[@class='k-dropdown-wrap k-state-default' and @role='listbox']/span[@class='k-input']"))).Click();
//or
new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//span[@class='k-dropdown-wrap k-state-default' and @role='listbox']//span[@class='k-select']"))).Click();
...