【问题标题】:Can I use a string variable when using LinkText?使用 LinkText 时可以使用字符串变量吗?
【发布时间】:2020-01-14 08:59:58
【问题描述】:

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

【问题讨论】:

  • 看这个问题:stackoverflow.com/q/20380720/578411 看来By.LinkText对页面结构很严格。虽然我希望您必须使用所显示的 html 来处理代码,但页面的其他部分可能对您不利。
  • 如果你使用字符串常量而不是变量会发生什么?
  • 这个元素是否在 IFRAME 中?
  • 请检查是否有@JeffC 提到的任何 iframe。
  • 这应该可以。您可以尝试几个调试步骤:在查找元素之前添加睡眠(注意,您最终应该使用等待而不是睡眠)在进行查找之前打印出变量 changeActionNumber。

标签: c# string visual-studio selenium linktext


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试下面的xapth

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

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

    【讨论】:

    • 我喜欢这个答案,因为您的元素很可能尚未显示在页面上。变量替换应该像您在问题中那样工作。
    【解决方案3】:

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

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

    我像这样更改了 iframe 焦点:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2023-03-31
      • 2020-09-08
      • 2017-03-24
      • 2020-06-11
      相关资源
      最近更新 更多