Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何查找特定字符串所在的行和单元格?硒/红宝石_Ruby_Google Chrome_Selenium_Internet Explorer - Fatal编程技术网

Ruby 如何查找特定字符串所在的行和单元格?硒/红宝石

Ruby 如何查找特定字符串所在的行和单元格?硒/红宝石,ruby,google-chrome,selenium,internet-explorer,Ruby,Google Chrome,Selenium,Internet Explorer,我在IE 11/和chrome中使用Selenium和Ruby 我试图编写一个脚本,在表中查找特定的文本片段,并返回它存在的列和行 我在网上找到了一些相近的例子,但它们只是返回单元格中的值,而不是返回文本的位置 为了找到我使用的对象(文本) varObject = driver.find_element(:xpath, "//*[contains(text(),'#{varDevice}')]") driver.execute_script("arguments[0].style.bor

我在IE 11/和chrome中使用Selenium和Ruby

我试图编写一个脚本,在表中查找特定的文本片段,并返回它存在的列和行

我在网上找到了一些相近的例子,但它们只是返回单元格中的值,而不是返回文本的位置

为了找到我使用的对象(文本)

  varObject = driver.find_element(:xpath, "//*[contains(text(),'#{varDevice}')]")

 driver.execute_script("arguments[0].style.border='3px solid red'", varObject) #Make sure I'm pointing to the correct text.
我希望我可以附加表本身的代码,但不幸的是,我不允许共享任何代码

我的目标是获取一个表,其中第1列x行有一个复选框,我试图查找的文本位于第2列x行,并抓取该行,以便我能够单击第1列x行中的复选框。一旦我弄清楚我正在搜索的文本的X是什么,点击复选框是最简单的部分

例如:

 <html>
 <body>
   <table>
     <tr>
       <td>
           *A check box*
       </td>
       <td> 192.168.0.0
       </td>
     </tr>

     <tr>
       <td>
           *A check box*
       </td>
       <td> 192.168.0.100
       </td>
     </tr>
   </body>

*复选框*
192.168.0.0
*复选框*
192.168.0.100
在这个场景中,我想查找192.168.0.100并返回它在第2行 这样我就可以点击第2行的复选框了


谢谢

有几种方法可以实现这一点,例如:

  • 在表格中搜索:

    • 遍历表中的行
    • 在第2列中查找文本匹配项
    • 找到后,单击第1列中的复选框
  • 通过相对xpath查找相邻列:

    • 查找文本匹配的元素(即,您已经找到的内容)
    • 通过将类似于
      /../td[1]
      的xpath应用于上述内容来查找相对列
  • 正如您最初建议的,通过在表中查找行号:

    • 查找文本匹配的元素,如上面所示
    • 使用一些来确定行号
  • 作为补充说明,我建议将当前xpath比“搜索整个页面”更具体一些。在某些时候,你肯定会错误地发现完全错误的东西。相反,您可以执行以下操作:

    //td[contains(text(),'#{varDevice}')]
    

    有几种方法可以实现这一点,例如:

  • 在表格中搜索:

    • 遍历表中的行
    • 在第2列中查找文本匹配项
    • 找到后,单击第1列中的复选框
  • 通过相对xpath查找相邻列:

    • 查找文本匹配的元素(即,您已经找到的内容)
    • 通过将类似于
      /../td[1]
      的xpath应用于上述内容来查找相对列
  • 正如您最初建议的,通过在表中查找行号:

    • 查找文本匹配的元素,如上面所示
    • 使用一些来确定行号
  • 作为补充说明,我建议将当前xpath比“搜索整个页面”更具体一些。在某些时候,你肯定会错误地发现完全错误的东西。相反,您可以执行以下操作:

    //td[contains(text(),'#{varDevice}')]
    

    我假设复选框是一个输入。如果不是,您可以调整XPath

    //input[../following-sibling::td[contains(.,'192.168.0.100')]]
    

    这将找到一个
    输入
    ,它的父级(TD)有一个包含您要查找的IP的同级
    TD
    。它适用于提供的HTML,但我猜您发布的HTML不完整,因此您可能需要调整它。

    我假设复选框是一个输入。如果不是,您可以调整XPath

    //input[../following-sibling::td[contains(.,'192.168.0.100')]]
    

    这将找到一个
    输入
    ,它的父级(TD)有一个包含您要查找的IP的同级
    TD
    。它与提供的HTML一起工作,但我猜您发布的HTML不完整,因此您可能需要调整它。

    您当前如何查找文本?请出示一些代码。这是我用了几次时间找到的对象。在本例中,varDevice是打印机的静态IP。varObject=driver.find_元素(:xpath,“/*[contains(text(),“#{varDevice}')]”)以及HTML是什么样子?我再说一遍,你能不能提供一个你正试图解决的问题?不同的答案可能更适合不同的情况。例如,请看。谢谢大家。我接受了JeffC注释以使代码正常工作。现在我需要接受Tom Lord的评论,使其更加健壮。有没有办法检查并给你们所有人评分?我最终使用了这个varObject=driver.find_元素(:xpath,“//*[../following sibling::td[contains(,'192.168.0.01')]”)varObject.click您当前如何查找文本?请出示一些代码。这是我用了几次时间找到的对象。在本例中,varDevice是打印机的静态IP。varObject=driver.find_元素(:xpath,“/*[contains(text(),“#{varDevice}')]”)以及HTML是什么样子?我再说一遍,你能不能提供一个你正试图解决的问题?不同的答案可能更适合不同的情况。例如,请看。谢谢大家。我接受了JeffC注释以使代码正常工作。现在我需要接受Tom Lord的评论,使其更加健壮。有没有办法检查并给你们所有人评分?最后我使用了这个varObject=driver.find_元素(:xpath,“//*[../following sibling::td[contains(,'192.168.0.01')]”)varObject.click你真的主张使用绝对xpath吗?这将是非常脆弱的,我想不出哪一次(除了实际的XML)这样做是个好主意。不,对不起,这有点误导。我真正想说的是“在表格中搜索,而不是在整个页面的任何地方”。(编辑了我的答案)更多反馈。。。您可以使用
    ///*/table
    而不是
    ///table
    ,但我会将整个内容缩短为
    ///td[contains(text(),'#{varDevice}')]
    。不会有什么大麻烦的<