C#/Selenium - 无法使用 contains() 找到 XPath 文本

问题描述

我有我希望使用 Selenium 单击的 html 元素:

<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 无济于事。 为什么找不到元素的任何想法?我怀疑它与文本周围的空格有关,但 contains() 也应该能够找到子字符串。

解决方法

请前往 https://www.w3schools.com/xml/xpath_intro.asp 阅读有关编写 xpath 的信息。从 Chrome 抓取路径是你能做的最糟糕的事情。这些路径需要更长的时间才能找到并且非常脆弱。在开发更改时添加 div、ul 或 li,您的路径将中断。

如果它不在 iframe 中,请尝试以下操作:

//a[contains(text(),'Importer obligationsliste')]
//a[normalize-space()='Importer obligationsliste']

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...