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



我有一个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,但没有成功。有什么想法为什么找不到元素吗?我怀疑这与文本周围的空白有关,但contains()也应该能够找到子字符串。

文本进口商义务列表有很多前导和尾随空白。因此,对于元素上的Click(),您必须为所需的ElementToBeClickable()诱导WebDriverWait,并且您可以使用以下定位器策略之一:

  • XPathcontains()一起用于文本进口商义务列表

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[contains(., 'Importer obligationsliste')]"))).Click();
    
  • XPathnormalize-space()一起用于文本进口商义务列表

    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();
    
  • 使用CsSelector

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("a.epi-navigation-global_user_settings_shell_search[href^='DatabaseJob']"))).Click();
    

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

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

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

最新更新