使用动态 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");
我是 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");