Java 硒getText

Java 硒getText,java,selenium,selenium-webdriver,gettext,getattribute,Java,Selenium,Selenium Webdriver,Gettext,Getattribute,我想通过.id使用By.code>或By.cssSelector使用getText() 我通过执行getAttribute(“value”)设法解决了我的问题,但我不明白为什么getText()不能像我期望的那样工作,我可能需要它,因此非常感谢所有帮助 以下是Java代码: WebDriverWait wait = new WebDriverWait(driver, 10); Boolean elementIsPresent = wait.until(ExpectedConditions.tex

我想通过.id使用
By.code>或
By.cssSelector使用
getText()

我通过执行
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()传递WebElement的内部文本


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

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

Java
ele.getAttribute(“innerHTML”)


这可能会使文本已经出现在背景中,但尚未显示在页面上。

如果要在Web元素上搜索给定文本,可以使用此选项。直接传递或通过字符串传递:

String textoToSearch = "Text inside Webelement";
driver.findElement(By.id("someID).getText().contains("textToSearch");
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;"/>
  • 使用xpath:


  • 理想情况下,您需要对
    元素位置的可见性()进行归纳,并且可以使用以下任一项:

    • 使用cssSelector和
      getText()

    • 使用xpath和
      getAttribute(“innerHTML”)


    getText只返回可见文本,不返回任何HTML元素,也不返回任何隐藏文本。例如,对于Java,我遇到了一个BR标记返回空的问题。我使用了
    .getText()
    而不是
    .getAttribute(“innerHTML”)
    ,它将返回我要查找的内容,包括任何不可见的HTML或隐藏的文本。@jsherk:但这不是这个问题的重点(?)。@PeterMortensen-是的,这有点像是因为op说了“但我不明白为什么getText()这是因为getText只返回不包含HTML元素的文本,而getAttribute将随文本一起返回HTML元素。但我的回答是注释而不是答案,因为这只是问题的一部分。在getText()返回空字符串但您的解决方案返回元素的内部文本的情况下,这非常有用。谢谢什么是
    WebElement
    ?是字面意思吗?
    System.out.println(wd.findElement(By.cssSelector("input#general_service_name[name='general_service_name']")).getAttribute("value"));
    
    System.out.println(wd.findElement(By.xpath("//input[@id='general_service_name' and @name='general_service_name']")).getAttribute("value"));
    
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input#general_service_name[name='general_service_name']"))).getAttribute("value"));
    
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='general_service_name' and @name='general_service_name']"))).getAttribute("value"));