【问题标题】:How can i get text of 2nd column if i will provide the text of 1st column如果我将提供第一列的文本,我如何获得第二列的文本
【发布时间】:2018-04-05 06:41:23
【问题描述】:

我有一个包含 2 列的表格。第一列包含金额类型,即书本费、注册费,第二列包含金额,即 500 和 400。我想获取第二列(金额)的文本,我如何通过提供文本来获取第二列的文本第 1 列的?由于动态数据集,仅提供第 2 列的 xpath 对我不起作用。

金额类型的xpaths是:

driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[1]")).getText();  (text=Book Fee)
driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[1]")).getText(); (text= Registration fees)

数量的xpaths是:

driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[2]")).getText();  (text= 500.00/=)
driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[2]")).getText(); (text=1000.00/=)

【问题讨论】:

    标签: java selenium selenium-webdriver xpath webdriver


    【解决方案1】:

    尝试使用以下 XPath 获取 Book Fee 费用:

    //*[@id='charges']/table[2]/tr/td[text()='Book Fee']/../td[2]
    

    尝试使用以下 XPath 获取 Registration fees 费用:

    //*[@id='charges']/table[2]/tr/td[text()='Registration fees']/../td[2]
    

    您可以参数化第一列的值,使其适用于所有使用字符串连接的人:

    //*[@id='charges']/table[2]/tr/td[text()=' " + feeType + "']/../td[2]
    

    这里的feeType,是您作为参数传递给方法的值。

    【讨论】:

      【解决方案2】:

      根据您的问题和您分享的HTML,您可以通过您的代码提取文本Book FeeRegistration fee,如下所示:

      String bookFeeText = driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[1]")).getText();
      String registrationFeeText = driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[1]")).getText();
      

      现在,要检索下一列的文本,您可以借助从先前列中提取的文本,如下所示:

      driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[.='" + bookFeeText + "']//following::td[1]")).getText();
      driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[.='" + registrationFeeText + "']//following::td[1]")).getText();
      

      【讨论】:

      • 但是这些 xpath 不是静态的。这就是为什么有时注册费用会显示在书费中。我如何通过不提供 xpath 而是通过提供文本来获取文本。就像它包含文本“书费”一样,它应该得到它前面的文本
      • xpaths 不是静态的 是什么意思? xpath 由最终用户编写,用于遍历 DOM。根据您的要求,这是一个动态的xpath。您的绝对 xpaths 很清楚,因此我确定了相对 xpath 否则无论如何都不可能为您提供答案。查看我的答案,让我知道状态。
      • 一个例外是生成 :org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id ='charges']/table[2]/tbody/tr[1]/td[.='书费']//following::td[1]"}
      • 在我的解决方案中它是 bookFeeText 但不是 Book Fee.
      【解决方案3】:

      因此,基本上您希望根据费用类型获取金额,而不管其在表格中的位置如何。

      List <WebElement> fee_List=driver.findElements(By.xpath("//*[@id='charges']/table[2]/tbody/tr"));
      WebElement bookFeeRow=driver.findElement(By.xpath("//td[text()='Book Fee']/.."));
      int bookFeeIndex=fee_List.indexOf(bookFeeRow)+1; //'+1' because index starts from 0 and webelement [indices] start from 1
      String bookFeeAmount=driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr["+bookFeeIndex+"]/td[2]")).getText(); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2014-04-13
        • 2020-09-09
        • 2014-06-06
        • 1970-01-01
        • 2018-11-04
        相关资源
        最近更新 更多