使用动态 ID 发布定位元素

Issue locating elements with dynamic ids

我是 selenium 的新手,我一直在解决一个问题:我在这个 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: invalid selector: An invalid or illegal selector was specified

所以问题是什么是定位输入的正确方法,以便我可以在其中发送密钥?

请尝试以下作为 css 选择器:

input.q-field__native.q-placeholder

所需元素是动态元素,因此要调用 SendKeys(),您必须引入 WebDriverWait with ExpectedConditions as 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");