当前位置: 首页 > 知识库问答 >
问题:

无法从Selenium Java的html元素中获取文本

姜杜吟
2023-03-14

我在Java中使用selenium。我无法从组合框的html元素中获取文本。每次我在combobox中得到所选值的空白文本时。

下面是我的combobox的html结构。

<ul id="servicetype-cave" class="z-combobox-content" style="height: auto;     width: auto;">
    <li id="zk_comp_140" class="z-comboitem">
    <li id="zk_comp_141" class="z-comboitem">
    <li id="zk_comp_142" class="z-comboitem">
    <li id="zk_comp_143" class="z-comboitem">
    <li id="zk_comp_144" class="z-comboitem z-comboitem-selected">
        <span class="z-comboitem-image"/>
        <span class="z-comboitem-text">Bill Grouping Service</span>
    </li>
    <li id="zk_comp_145" class="z-comboitem">
    <li id="zk_comp_146" class="z-comboitem">
    <li id="zk_comp_147" class="z-comboitem">
    <li id="zk_comp_148" class="z-comboitem">
    <li id="zk_comp_149" class="z-comboitem">
    <li id="zk_comp_150" class="z-comboitem">
</ul>

我在元素中使用了以下xpath

@FindBy(xpath = "//ul[@id='servicetype-cave']/li[contains(@class,'z-comboitem-selected')]/span[@class='z-comboitem-text']")
public WebElement selectedServiceName;

public void selectService {
// Selecting an option from dropdown
WebElement tempEle = driver.findElement(By.xpath("(//div[@id='servicetype-pp']//span[2])[3]"));
commonFunctions.clickElement(tempEle);
String strtemp = selectedServiceName.getText();
System.out.println("Selected Service: " + strtemp);
}

请帮忙。

蒂亚。

共有2个答案

胥智
2023-03-14

@FindBy是渴望内部化。这意味着它在Page对象创建时进行初始化。我假设您应该在某些先决条件后获得组合框的值。所以让它使用延迟初始化。在您实际需要的地方调用以下代码

findElement(By.xpath("//ul[@id='servicetype-cave']/li[contains(@class,'z-comboitem-selected')]/span[@class='z-comboitem-text']"));
景建业
2023-03-14

我建议您尝试使用。cssSelector()如下:-

WebElement el = driver.findElement(By.cssSelector("ul#servicetype-cave li.z-comboitem-selected span.z-comboitem-text"));

WebElement el = driver.findElement(By.cssSelector("ul#servicetype-cave li.z-comboitem.z-comboitem-selected span:nth-child(2)"));

现在使用<代码>。getText()获取文本,如下所示:

el.getText();

如果不幸。getText()不起作用请尝试使用。getAttribute(“textContent”)如下:

el.getAttribute("textContent");

或者尝试使用。getAttribute(“innerHTML”)如下:

el.getAttribute("innerHTML");

希望它能起作用:)

 类似资料:
  • 我想从Chrome的模态中得到一条短信。使用控制台,我可以获得如下内部文本: 现在,在我的测试中,我可以使用 我甚至可以点击那个网址 例如,我不能将内部文本放入变量。我试着使用这篇文章中的ClientFunction 并尝试使用本文建议的普通选择器 如何从元素中提取文本?我知道在这种情况下是有限的,对吗?

  • 我正在使用下面的一段代码来获取某个特定定位器的文本。 这将返回字符串值,但只有在IE浏览器中,它才在其他浏览器(即Firefox和chrome)中失败并工作。 我面临这个问题: 组织。openqa。硒。WebDriverException:无法获取元素文本(警告:服务器未提供任何堆栈跟踪信息) 请帮我解决这个问题,IE浏览器中的这个异常也非常不一致,有时它通过了,有时失败了相同的代码。

  • 本文向大家介绍JavaScript中获取HTML元素值的三种方法,包括了JavaScript中获取HTML元素值的三种方法的使用技巧和注意事项,需要的朋友参考一下 JavaScript中取得元素的方法有三种:分别是: 1、getElementById() 方法:通过id取得HTML元素。 2、getElementsByName()方法:通过name取得元素,是一个数组。 3、getElements

  • 问题内容: 您如何从内获得一个? 问题答案: var iframe = document.getElementById(‘iframeId’); var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document; 您可以更简单地写: 并将返回第一个有效的内部文档。 一旦获

  • 问题 在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据。 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的文本,可以使用Element.text()方法 对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或Node.outerHtml()方法 示例: String html =

  • 我正在浏览一个包含几个元素的网页,我想在不包含其子元素的情况下获取其中的文本。 页面结构如下: 当我使用时,得到的结果是: 我正在使用BeautifulSoup4和Python3