[英]C# / Selenium - failing to find XPath text using contains()
我有和 html 元素,我希望使用 Selenium 点击:
<a class="epi-navigation-global_user_settings_shell_search " href="DatabaseJob.aspx?pluginId=20">
Importer obligationsliste
</a>
使用以下 xpath: /html/body/form/div[4]/div[1]/div/ul/li[2]/ul/li[19]/a
我尝试通过以下表达式单击包含文本"Importer obligationsliste"
的元素:
var obligationButton = By.XPath("//a[contains(text(), 'Importer')]");
wait.Until(ExpectedConditions.ElementToBeClickable(obligationButton)).Click();
然而,该元素从未被发现。 我也尝试了完整的字符串Importer obligationsliste
dutyliste 无济于事。 任何想法为什么找不到该元素? 我怀疑它与文本周围的空白有关,但contains()
也应该能够找到子字符串。
文本Importer dutyliste有很多前导和尾随空格。 因此,要在元素上Click()
,您必须为所需的ElementToBeClickable()
诱导WebDriverWait ,并且您可以使用以下任一定位器策略:
使用XPath和contains()
作为文本Importer dutyliste :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[contains(., 'Importer obligationsliste')]"))).Click();
将XPath与normalize-space()
用于文本Importer dutyliste :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[normalize-space()='Importer obligationsliste']"))).Click();
使用XPath :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[@class='epi-navigation-global_user_settings_shell_search ' and starts-with(@href, 'DatabaseJob')]"))).Click();
使用PartialLinkText :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.PartialLinkText("Importer obligationsliste"))).Click();
使用CssSelector :
new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("a.epi-navigation-global_user_settings_shell_search[href^='DatabaseJob']"))).Click();
请阅读 go 到https://www.w3schools.com/xml/xpath_intro.asp并阅读有关编写 xpath 的信息。 从 Chrome 抓取路径是您能做的最糟糕的事情。 这些路径需要更长的时间才能找到并且非常脆弱。 在开发更改添加 div、ul 或 li 时,您的路径将中断。
如果它不在 iframe 中,请尝试以下操作:
//a[contains(text(), 'Importer obligationsliste')]
//a[normalize-space()='Importer obligationsliste']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.