【问题标题】:How to make selenium wait until text in specific place如何让硒等到特定位置的文本
【发布时间】:2020-01-20 12:48:31
【问题描述】:

我有一个关于硒等待的问题。 我希望 selenium 等到特定 xpath 中显示的文本。 正文是:“Hensley and Workman Trading” xpath 是://td[@class='td_company ng-star-inserted'] 我尝试了 wait until.attributeTobe 函数,但不能让它等待。 我做错了什么(我认为直到行不起作用,顺序或条件为真)

public static void getWebElementByXpathWithWaitTextToBeSeen()
    {
        WebDriver driver2 = WebDriverMgr.getDriver();
      //  driver2.manage().timeouts().implicitlyWait(IMPLICIT_WAITE, TimeUnit.SECONDS);
        WebDriverWait wait = new WebDriverWait(driver2,EXPLICIT_WAITE);
        wait.until(ExpectedConditions.attributeToBe(By.xpath("//td[@class='td_company ng-star-inserted']"),"Hensley and Workman Trading","true"));
    }

来自开发工具:

【问题讨论】:

  • 我知道这不是你的问题,但我看到隐含的等待逻辑已被注释掉。混合隐式和显式等待时要小心,因为它可能不会产生预期的效果。
  • 我知道这是在评论中

标签: java selenium selenium-webdriver xpath webdriverwait


【解决方案1】:

试试

" Hensley and Workman Trading " // With the extra spaces

而不是

"Hensley and Workman Trading"

不是肯定的,但那些空格可能会被甩掉?

【讨论】:

  • wait.until(ExpectedConditions.attributeToBe(By.xpath("//td[@class='td_company ng-star-inserted']"),"Hensley and Workman Trading","true" )); - 这是“true”的正确语法吗?\
  • 我已经多年没有使用 Java 和 Selenium,但是当我阅读文档时,"true" 似乎不正确。实际上,我还建议您查看attributeContains 而不是attributeToBe。不那么脆。
  • 文档说:locator - 用于定义 WebElement 以检查其参数 attribute - 用于定义 css 或 html 属性 value - 用作预期的属性值
  • ExpectedConditions 文档中还有textMatches,这可能是一个非常干净的解决方案。
【解决方案2】:

要等待文本 Hensley and Workman Trading 显示在 WebElement 中,您可以使用以下 Locator Strategies

new WebDriverWait(driver, 20).until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//td[@class='td_company ng-star-inserted']"), "Hensley and Workman Trading"));

【讨论】:

    【解决方案3】:

    OpenQA.Selenium.Support.UI 实现了wait.Until(expectedCondition) 功能。这是您尝试执行的操作的示例:

      public static void WaitForElementText(this IWebDriver driver, By by, string text)
      {
          var wait = new WebDriverWait(driver, TimeoutScope.Current.Timeout);
          wait.Until(d => d.FindElement(by).Text == text);
      }
    

    在你的情况下,它看起来像这样:

          var wait = new WebDriverWait(driver, TimeoutScope.Current.Timeout);
          wait.Until(d => d.FindElement(By.XPath("//td[@class='td_company ng-star-inserted']")).Text == text);
    

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2017-03-25
      • 2015-07-23
      • 2022-10-19
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多