【问题标题】:How to write a Xpath for Showing text in console which is separated using <br> tag?如何编写用于在控制台中显示文本的 Xpath,使用 <br> 标签分隔?
【发布时间】:2022-01-13 01:44:12
【问题描述】:

如何编写 Xpath 以在控制台中显示使用
标签分隔的文本?

网址:http://www.tizag.com/htmlT/htmlcheckboxes.php

<div class="display"> Please select every sport that you play.
    <br> Soccer:
    <input type="checkbox" name="sports" value="soccer">
    <br> Football:
    <input type="checkbox" name="sports" value="football">
    <br> Baseball:
    <input type="checkbox" name="sports" value="baseball">
    <br> Basketball:
    <input type="checkbox" name="sports" value="basketball">
    <br>
</div>

【问题讨论】:

    标签: java selenium xpath


    【解决方案1】:

    您可以使用以下 xpath:

    //div[@class='display']/input[@value='football']
    //div[@class='display']/input[@value='baseball']
    //div[@class='display']/input[@value='basketball']
    

    但是,对于这些 xpath 中的每一个,您会得到 2 个对象,如下所示(例如 Football):

    因此,对于这种特殊情况,如果您需要在 HTML Checkbox Form 标题下选择 Football 复选框,那么您有几个选项,例如:

    • 按索引://div[@class='display'][1]/input[@value='football']

    • 通过在 2 个相似对象之间找到一个静态对象,即如果在这种情况下,我想选中静态标题 HTML Pre-Selected Checkboxes 之前 之前的Football 复选框(参考图片),我们可以这样写:

      //h2[contains(text(),'HTML Pre-Selected Checkboxes')]/preceding-sibling::div/input[@value='football']

      如果我们想选中 2nd Football 复选框,我们知道它出现在 标题 HTML Pre-Selected Checkboxes 之后,因此可以很好地编写 xpath:

      //h2[contains(text(),'HTML Pre-Selected Checkboxes')]/following-sibling::div/input[@value='football']

    【讨论】:

      【解决方案2】:

      文本足球:足球:棒球:篮球:等在Text Node内.因此,要提取文本,您可以使用以下Locator Strategy

      • xpath:

        // printing Soccer:
        System.out.println((String)((JavaScriptExecutor)driver).executeScript("return arguments[0].childNodes[2].textContent;", driver.findElement(By.xpath("//div[@class='display']"))));
        
        // printing Football:
        System.out.println((String)((JavaScriptExecutor)driver).executeScript("return arguments[0].childNodes[5].textContent;", driver.findElement(By.xpath("//div[@class='display']"))));
        
        // printing Baseball:
        System.out.println((String)((JavaScriptExecutor)driver).executeScript("return arguments[0].childNodes[8].textContent;", driver.findElement(By.xpath("//div[@class='display']"))));
        
        // printing Basketball:
        System.out.println((String)((JavaScriptExecutor)driver).executeScript("return arguments[0].childNodes[11].textContent;", driver.findElement(By.xpath("//div[@class='display']"))));
        

      【讨论】:

        【解决方案3】:

        您可以尝试以下 Xpath 并使用 元素 从中提取文本。请澄清这是否不是您所要求的。

        //div[@class='display'][1]
        

        找到元素后,您可以使用.text.get_attribute("innerText")方法在控制台中显示所需的文本。

        driver.get("http://www.tizag.com/htmlT/htmlcheckboxes.php")
        
        data = driver.find_element(By.XPATH,"//div[@class='display'][1]")
        
        # Using `.text`
        print(data.text)
        
        # Using `.get_attribute("innerText")`
        print(data.get_attribute("innerText"))
        

        这两种方法的输出都是:

        Please select every sport that you play.
        Soccer:
        Football:
        Baseball:
        Basketball:
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-28
          • 2018-07-13
          • 1970-01-01
          • 2023-02-25
          相关资源
          最近更新 更多