0

在 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时不能使用变量吗?

4

3 回答 3

1

试试下面xapth

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

或者

wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//a[contains(.,'" +changeActionNumber + ')]"))).Click();
于 2019-09-12T13:30:24.350 回答
0

AFAIK,LinkText 选择器在页面上显示链接文本,而不是在 html 代码中。因此,如果此文本在显示在页面上之前进行了额外的格式化,例如将字母变为小写或删除了特殊符号,您必须考虑这一点。

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

By.XPath(string.Format(".//a[.='{0}']", changeActionNumber))
于 2019-09-12T13:25:53.330 回答
0

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

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

我像这样改变了我的 iframe 焦点:

driver.SwitchTo().DefaultFrame();

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

之后,我可以毫无问题地将 LinkText 与变量一起使用。

于 2019-10-03T12:05:42.257 回答