【问题标题】:Get text found between span - selenium获取在 span - selenium 之间找到的文本
【发布时间】:2018-09-04 11:08:22
【问题描述】:

从谷歌浏览器检查元素:

<div class="form-style-abc">
   <fieldset>
    <legend><span class="number">*</span>Search Zone</legend>

需要检索“搜索区域”,但我无法执行搜索和 getText()

我在 Eclipse 上执行了以下操作,但出现错误:

代码:

String HeaderTxt = driver.findElement(By.xpath("//span[@class = 'number']")).getText();
System.out.println(HeaderTxt);

错误信息:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//span[@class= 'number']"}

【问题讨论】:

    标签: java html eclipse selenium selenium-webdriver


    【解决方案1】:

    根据您提供的 HTML 来提取文本 Search Zone,您可以使用以下代码行:

    String HeaderTxt = driver.findElement(By.xpath("//div[@class='form-style-abc']/fieldset/legend[(self::legend) and not (@class='number')]")).getText();
    System.out.println(HeaderTxt);
    

    更新 1

    根据您的评论更新,您仍然看到 NoSuchElementException 可能您需要等待诱导 WebDriverWait 的元素,如下所示:

    WebElement HeaderTxtElem = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='form-style-abc']/fieldset/legend[(self::legend) and not (@class='number')]")));
    System.out.println(HeaderTxtElem.getText());
    

    更新 2

    正如您提到的,该元素位于&lt;iframe&gt; 标记内,您需要切换到确切的frame,然后寻找WebElement。在这里你可以找到关于How to switch to frame in Selenium Webdriver Java的详细讨论


    更新 3

    Xpath 解释

    通过 xpath 作为"//div[@class='form-style-abc']/fieldset/legend",我们已经到达&lt;legend&gt; 节点。现在您只想获取文本 Search Zone。因此,在&lt;legend&gt; 标记内,您必须修剪子&lt;span&gt; 标记,该标记具有class 作为number。因此,我们在 xpath not 中添加了一个子句,以在检索文本时考虑 (@class='number'):

    String HeaderTxt = driver.findElement(By.xpath("//div[@class='form-style-abc']/fieldset/legend[(self::legend) and not (@class='number')]")).getText();
    

    【讨论】:

    • 嗨,仍然收到以下错误 - 没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“//div[@class='form-style -abc']/fieldset/legend[(self::legend) 而不是 (@class='number')]"}
    • 问题仍然存在 - org.openqa.selenium.TimeoutException:20 秒后超时等待 By.xpath 定位的元素的可见性://div[@class='form-style-abc' ]/fieldset/legend[(self::legend) 而不是 (@class='number')]
    • 你能确保元素不在iframe中吗?
    • 检查我的答案更新,如果您有任何其他问题,请告诉我。
    • 感谢 DebanjanB!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2020-01-29
    • 2022-07-11
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多