【问题标题】:Selenium getText硒 getText
【发布时间】:2014-07-11 07:57:15
【问题描述】:

我想getText() 使用By.idBy.cssSelector

我通过getAttribute("value") 设法解决了我的问题,但我不明白为什么getText() 没有像我预期的那样工作,我可能需要它,所以感谢所有帮助。

这是Java代码:

WebDriverWait wait = new WebDriverWait(driver, 10);
Boolean elementIsPresent = wait.until(ExpectedConditions.textToBePresentInElementValue(By.cssSelector("#general_service_name"),"[reg] general_service_name")); // true

//WebElement general_service_name = driver.findElement(By.cssSelector("#general_service_name"));
WebElement general_service_name = driver.findElement(By.id("general_service_name"));

// Display check
Boolean isDisplayed;
if(general_service_name.isDisplayed())  isDisplayed = new Boolean(true); else isDisplayed = false; //true

String text_empty = general_service_name.getText(); //""
String text_with_value = driver.findElement(By.id("general_service_name")).getAttribute("value"); //"[reg] general_service_name"

还有 HTML:

<input id="general_service_name" type="text" value="[reg] title" name="general_service_name" style="float:left;"/>

【问题讨论】:

  • getText 只返回可见文本,不返回任何 HTML 元素,也不返回任何隐藏文本。例如,在使用 Java 时,我遇到了一个 BR 标签返回空的问题。我使用 .getAttribute("innerHTML") 而不是 .getText(),它会返回我正在寻找的内容,包括任何不可见的 HTML 或隐藏的文本。
  • @jsherk:但这不是 this 的问题(?)。
  • @PeterMortensen - 是的,这有点是因为操作说“但我不明白为什么 getText() 不能像我预期的那样工作”,原因是 getText 只返回文本没有 HTML 元素,而 getAttribute 将返回 html 元素以及文本。但我确实以评论而不是答案的形式做出了回应,因为它只是问题的一部分。

标签: java selenium selenium-webdriver gettext getattribute


【解决方案1】:

http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getText()

getText() 传递 WebElement 的内部文本。

您的输入字段没有任何内部文本。该文本位于您的值属性中,因此通过 getAttribute("value") 访问它是正确的方法。

【讨论】:

    【解决方案2】:

    Java ele.getAttribute("innerHTML");

    这可能会使文本已经在背景中并且尚未显示在页面上。

    【讨论】:

    • 这在 getText() 返回空字符串但您的解决方案返回 元素的内部文本的情况下非常有用。谢谢!
    【解决方案3】:

    简单的答案 - 就是这样设计的。 getText() 解析标签的内容(即它的innerText),这对于输入来说显然是空的。

    【讨论】:

      【解决方案4】:

      如果您想在 WebElement 上搜索给定的文本,您可以使用它。直接或通过字符串传递:

      String textoToSearch = "Text inside Webelement";
      driver.findElement(By.id("someID).getText().contains("textToSearch");
      

      【讨论】:

      • 什么是WebElement?是字面意思吗?
      【解决方案5】:

      getText()

      getText() 返回此元素的可见文本。

      java.lang.String getText()
      Get the visible (i.e. not hidden by CSS) text of this element, including sub-elements.
      
      
      Returns:
      The visible text of this element.
      

      根据元素的 HTML:

      <input id="general_service_name" type="text" value="[reg] title" name="general_service_name" style="float:left;"/>
      

      WebElement 没有可见文本,但value 属性的值设置为[reg] title

      因此,要提取value 属性的值,即[reg] title,您可以使用以下任一Locator Strategies

      • 使用cssSelector

        System.out.println(wd.findElement(By.cssSelector("input#general_service_name[name='general_service_name']")).getAttribute("value"));
        
      • 使用xpath

        System.out.println(wd.findElement(By.xpath("//input[@id='general_service_name' and @name='general_service_name']")).getAttribute("value"));
        

      理想情况下,您需要为visibilityOfElementLocated() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

      • 使用 cssSelectorgetText():

        System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input#general_service_name[name='general_service_name']"))).getAttribute("value"));
        
      • 使用 xpathgetAttribute("innerHTML"):

        System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='general_service_name' and @name='general_service_name']"))).getAttribute("value"));
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多