使用动态ID发出定位元素

我对硒还很陌生,但我一直想找出一个问题:我在html块中输入了内容,我的任务是找到它并发送键。问题在于不仅id是动态的,而且CSS选择器和Xpath

一切看起来像这样

Xpath //*[@id="qf_25239c53-8f51-a9af-adff-fb4c61c369dd"]
CSSselector # qf_6fc767f5-f6d9-ce40-dc78-df0e43f6dc75
<label data-v-1a920554="" for="qf_b75b7021-5df4-2283-1c79-23bddcde3a3d" class="q-field row no-wrap items-start indent q-input q-field--outlined q-field--dense">
<div class="q-field__inner relative-position col self-stretch column justify-center">
<div tabindex="-1" class="q-field__control relative-position row no-wrap">
<div class="q-field__control-container col relative-position row no-wrap q-anchor--skip">
<input tabindex="0" placeholder="Заголовок" id="qf_b75b7021-5df4-2283-1c79-23bddcde3a3d" type="text" class="q-field__native q-placeholder"></div></div></div></label>

我这样做并没有解决这种元素异常

IWebElement MarkerNameInput = Setup.Driver.FindElement(By.XPath("(//*[@class = 'q-field__native q-placeholder'])[1]"));

但是它只解决了一个例外与另一个例外,现在我被困在:

  

InvalidSelectorException:无效的选择器:指定了无效或非法的选择器

所以问题是找到输入的正确方法是什么,以便我可以在其中发送键?

a3345887 回答:使用动态ID发出定位元素

期望的元素是动态元素,因此要调用SendKeys(),必须用WebDriverWait作为ExpectedConditions来诱导ElementToBeClickable Method (By),并且可以使用以下任一解决方案:

  • CssSelector

    new WebDriverWait(driver,TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input.q-field__native.q-placeholder[id^='qf_'][placeholder='Заголовок']"))).SendKeys("Vladimir Krygin");
    
  • XPath

    new WebDriverWait(driver,TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@class='q-field__native q-placeholder' and starts-with(@id,'qf_')][@placeholder='Заголовок']"))).SendKeys("Vladimir Krygin");
    
,

请尝试以下方式作为CSS选择器:

input.q-field__native.q-placeholder

本文链接:https://www.f2er.com/3109817.html

大家都在问