Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
842 views
in Technique[技术] by (71.8m points)

c# - "Message=unknown error: cannot focus element" while executing tests through Selenium, ChromeDriver and Chrome

I am trying to send key for a drop down list in google chrome browser but i am receiving this error

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:UsersmeUITestsRegister.cs:line 382

This is my method :

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

This how its look in 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>

This is the XPath :

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

This how dropdownlist value look like if i want to click on it using selenium IDE because this value is retrieved from database :

  1. First i clicked on the dropdownlist
  2. Second i selected the country

enter image description here

Is there another way to add value by keyboard in selenium instead of send key ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

As per the HTML you have shared the target element is a <span> tag so you won't be able to invoke SendKeys() method. Instead you need to induce WebDriverWait for the desired element to be clickable and you can use either of the following solution:

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();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...