单击Selenium中的标记行查找文本

时间:2014-05-28 07:26:57

标签: selenium-webdriver

我的HTML代码是:

enter code here:
<table>
  <tbody>
    <tr>
      <td class="item item-selected" id="gwt-uid-537" role="menuitem">Test Customer 1<br>#34</td>
    </tr>

    <tr>
      <td class="item" id="gwt-uid-538" role="menuitem">TEST CUSTOMER 2<br>#1,9874563210</td>
    </tr>

    <tr>
      <td class="item" id="gwt-uid-539" role="menuitem">test <br>test</td>
    </tr>
  </tbody>
</table>

我想要做的只是在断行标记之前找到客户名称(例如:TEST CUSTOMER 2),然后单击该行。

我尝试过如下:

String ExpCustName = "TEST CUSTOMER 2";

Thread.sleep(1000);

WebElement FindCust = driver.findElement(By.xpath("//div[@class='customer']/table/tbody/tr/td/input[@class='gwt-SuggestBox']"));
FindCust.sendKeys("TES");

List<WebElement> CustList = driver.findElements(By.xpath("//div[@class='suggestPopupMiddleCenterInner suggestPopupContent']//table//tr"));

for(int i=0;i<CustList.size();i++){
    String ActCustName = CustList.get(i).getText();
    System.out.println(ActCustName);

    Thread.sleep(1000);
    if(ActCustName.contains(ExpCustName)){
        CustList.get(i).click();
    }
} 

4 个答案:

答案 0 :(得分:6)

// find the customer table
WebElement table = driver.findElement(By.xpath("//div[@class='customer']/table"));

// find the row
WebElement customer = table.findElement(By.xpath("//tr/td[contains(text(), 'TEST CUSTOMER 2')]"));

// click on the row
customer.click();

您可能需要调整两个xpath表达式以匹配您的特定页面。

答案 1 :(得分:1)

我从这个问题中理解的是:

List<WebElement> CustList = driver.findElements(By.xpath("//div[@class='suggestPopupMiddleCenterInner suggestPopupContent']//table//tr"));

for(int i=0;i<CustList.size();i++){
    String ActCustName = CustList.get(i).getText();
    System.out.println(ActCustName);

    Thread.sleep(1000);
    if(ActCustName.contains(ExpCustName)){
        CustList.get(i).click();
    }

以上部分代码是点击“TEST CUSTOMER 2”

为此您可以使用以下声明:

driver.findElement(By.xpath("//div[@class='suggestPopupMiddleCenterInner suggestPopupContent']//table/tbody/tr[./td[text()='TEST CUSTOMER 2']]")).click();

我不明白的是:

WebElement FindCust = driver.findElement(By.xpath("//div[@class='customer']/table/tbody/tr/td/input[@class='gwt-SuggestBox']"));
FindCust.sendKeys("TES");

上述代码的目的是什么?

答案 2 :(得分:1)

static WebDriver driver = new FirefoxDriver();
private static WebElement findElementByTagAttr(String tagName, String attrName, String attValue)
{
    List<WebElement> elements = driver.findElements(By.tagName(tagName));
    WebElement elementToFind = null;
    for(WebElement element : elements)
    {
        if(element.getAttribute(attrName).equals(attValue))
        {
            elementToFind = element;
            break;
        }

    }
    return elementToFind;
}

答案 3 :(得分:0)

在Ruby中,我发现以下内容非常有效。首先是一些背景 - 我使用.properties文件来托管我的元素ID和我的值(URL,文本字段条目等),所以我需要在元素ID的中间插入一个值。我的解决方案是将xpath分解为两个元素id指针:

  driver.find_element(:xpath, $elementIDs["FIRST_PART_OF_XPATH"] + $props["REQUIRED_VALUE"] + $elementIDs["END_OF_XPATH"]).click

它并不漂亮,但它很有效。我希望这有助于下一个寻找解决方案的Ruby人。 编辑:对不起,我写这篇文章时心烦意乱。 xpath是// td [包含(。,&#39; Blah&#39;)]其中Blah是$ props提供的文本。我的指针文件如下所示:

FIRST_PART_OF_XPATH=//td[contains(.,'
END_OF_XPATH=')]

我可以通过编辑带有所需文本的$ props文件,轻松更改我搜索的文本。就像我说的那样,它不是很漂亮的代码,但它起作用了。