如何使用SeleniumWebDriverJava查找表行号

如何使用SeleniumWebDriverJava查找表行号,java,html,selenium,webdriver,Java,Html,Selenium,Webdriver,我有一个多行多列的表 HTML代码如下所示: <!-- language: lang-html --> <div id="ScheduleTable-01" class="widget Scheduletable suppress-errors Schedule-grid" data-widget="ScheduleTable"> <div class="grid-wrapper"> <table class="nostyles

我有一个多行多列的表

HTML代码如下所示:

<!-- language: lang-html -->
    <div id="ScheduleTable-01" class="widget Scheduletable suppress-errors Schedule-grid" data-widget="ScheduleTable">
    <div class="grid-wrapper">
    <table class="nostyles weekmode hourstype fullmonth" style="width: 100%;">
    <thead>
    <tbody>
    <tr id="20631697" class="Schedule-row row0 20631697 key_AuthoriserId-1077_JobId-402704200_TaskId-CON_TsCode-35" data-row-index="0" data-job="402121200,Job XXX">
    <tr id="-499545938" class="Schedule-row row1 -499545938 key_AuthoriserId-1077_JobId-A01200131S_TaskId-CON_TsCode-35" data-row-index="1" data-job="A01763431 Job YYY">
    <tr id="-985929934" class="Schedule-row row2 -985929934 key_AuthoriserId-1277_JobId-I02010171S_TaskId-INT_TsCode-30" data-row-index="2" data-job="I02872371 S,Job ZZZ">
在这种情况下,如何查找行号?谢谢

您可以轻松使用getAttribute查看。getAtribute允许您获取任何html标记的atribute值

印刷品

一,

编辑

好的,可能有两个因素会影响这一点

元素位于iframe内部 如果是,则使用

driver.switchTo().frame(driver.findElement(By.cssSelector("css for iframe")));
您查找元素的速度太快。使用显式等待

String job = "A01763431 Job YYY";
By selector = By.cssSelector("#ScheduleTable-01 tr[data-job='" + job + "']");
WebElement element = new WebDriverWait(driver,10).until(ExpectedConditions.presenceOfElementLocated(selector));
String dataindex = element.getAttribute("data-row-index");
提供的选择器将返回多个元素

查看返回的数量

您可以轻松使用getAttribute查看。getAtribute允许您获取任何html标记的atribute值

印刷品

一,

编辑

好的,可能有两个因素会影响这一点

元素位于iframe内部 如果是,则使用

driver.switchTo().frame(driver.findElement(By.cssSelector("css for iframe")));
您查找元素的速度太快。使用显式等待

String job = "A01763431 Job YYY";
By selector = By.cssSelector("#ScheduleTable-01 tr[data-job='" + job + "']");
WebElement element = new WebDriverWait(driver,10).until(ExpectedConditions.presenceOfElementLocated(selector));
String dataindex = element.getAttribute("data-row-index");
提供的选择器将返回多个元素


看看返回了多少

我在这里尝试了这个,它解决了问题

<!-- language: lang-java -->
    String job = "YYY";
    WebElement table = driver.findElement(By.xpath("//tr[contains(@data-job,'"+job+"')]")); 
    String dataRowIndex = table.getAttribute("data-row-index");
    System.out.println(dataRowIndex);
基本上,我只是获取作业ID YYY的一部分,而不是全名,并在xpath中使用contains


@Vivek@Saifur非常感谢您的建议

我在这里试过这个,它解决了问题

<!-- language: lang-java -->
    String job = "YYY";
    WebElement table = driver.findElement(By.xpath("//tr[contains(@data-job,'"+job+"')]")); 
    String dataRowIndex = table.getAttribute("data-row-index");
    System.out.println(dataRowIndex);
基本上,我只是获取作业ID YYY的一部分,而不是全名,并在xpath中使用contains


@Vivek@Saifur非常感谢您的建议

谢谢@Saifur。我试过了,但它返回错误org.openqa.selenium.NoSuchElementException:没有这样的元素。似乎是驱动程序.findElementBy.cssSelector[data job='+job+'];找不到该元素。如果我更改为driver.findElementBy.id20631697;,然后它可以找到它,但我不能依赖ID。试试这个//因为你知道作业字符串job=A01763431 job YYY;字符串dataRowIndex=driver.findElementBy.cssSelectorScheduleTable-01 tr[data job='+job+'].getAttributedata行索引;System.out.printlndataRowIndex@键盘记录器U也可以使用xpath作为//tr[contains@data-作业“+job+”],然后使用getAttribute获取dataRowIndex。@Saifur我仍然获取org.openqa.selenium.NoSuchElementException:没有这样的元素@Vivek Singh我获取org.openqa.selenium.InvalidSelectorException:无效选择器:无法找到带有xpath表达式的元素//tr[contains@data-作业,'A01763431作业YYY'],因为以下错误:语法错误:未能对“文档”执行“评估”:字符串“//tr”[contains@data-作业,'A01763431作业YYY']'不是有效的XPath表达式。XPathThank@Saifur的结尾有一个奇数。我尝试过它,但它返回错误org.openqa.selenium.NoSuchElementException:没有这样的元素。似乎是driver.findElementBy.cssSelector[data job='+job+'];找不到元素。如果我更改为driver.findElementBy.id20631697;,则它可以找到它,但我不能依赖于ID。请尝试此操作//因为您知道作业字符串job=A01763431 job YYY;String dataRowIndex=driver.findElementBy.cssSelectorScheduleTable-01 tr[data job='+job+'].getAttributedata行索引;System.out.printlndataRowIndex;@keylogger U还可以将xpath用作//tr[contains@data-作业“+job+”]然后使用getAttribute获取dataRowIndex。@Saifur我仍然获取org.openqa.selenium.NoSuchElementException:没有这样的元素@Vivek Singh我获取org.openqa.selenium.InvalidSelectorException:无效选择器:无法找到带有xpath表达式的元素//tr[contains@data-作业,'A01763431作业YYY']由于以下错误:SyntaxError:未能对“文档”执行“评估”:字符串“//tr”[contains@data-作业'A01763431 job YYY']'不是有效的XPath表达式。XPath结尾有一个奇数