使用 LinkText 时可以使用字符串变量吗?

Can I use a string variable when using LinkText?

在 Visual Studio 中使用 Selenium。我正在尝试单击列表中的项目。该项目具有唯一 ID。

CA-41107005-00000040

我不想引用实际的 ID 号,而是想通过引用一个将存储项目 ID 的字符串变量来使测试更加动态。我称这个变量为:changeActionNumber

项目的 HTML 代码如下所示:

我试过这样点击项目:

wait.Until(ExpectedConditions.ElementToBeClickable(By.LinkText($"{changeActionNumber}"))).Click();

还有这样的:

wait.Until(ExpectedConditions.ElementToBeClickable(By.LinkText(changeActionNumber))).Click();

但是两种情况都报同样的错误:

Message: OpenQA.Selenium.WebDriverTimeoutException : Timed out after 10 seconds
  ----> OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element: {"method":"link text","selector":"CA-41107005-00000040"}
  (Session info: chrome=77.0.3865.75)

使用LinkText时是不是不能使用变量?

AFAIK,LinkText 选择器查找页面上显示的 link 文本,而不是 html 代码中的文本。因此,如果此文本在显示在页面上之前被额外格式化,例如字母小写或删除特殊符号,则必须考虑这一点。

如果您想使用代码中显示的文本,请尝试使用 xpath

By.XPath(string.Format(".//a[.='{0}']", changeActionNumber))

试试下面的方法xapth

wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//a[text()='" +changeActionNumber + ']"))).Click();

wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//a[contains(.,'" +changeActionNumber + ')]"))).Click();

在 LinkText 中使用变量不是问题。

问题是我的驱动程序没有关注正确的 iframe,因此永远找不到匹配的 LinkText 值。

我这样更改了 iframe 焦点:

driver.SwitchTo().DefaultFrame();

driver.SwitchTo().Frame("firstiframe");
driver.SwitchTo().Frame("secondiframe");
driver.SwitchTo().Frame("thirdiframe");
driver.SwitchTo().Frame("ECMMyChangeActions");

然后我可以毫无问题地使用带有变量的 LinkText。