1

我正在使用 selenium 并试图设计一个测试,其中 Selenium 根据页面上行中另一列的值识别我想要访问的顺序。

我正在测试的页面没有以任何稳定的顺序存储记录,我需要单击处于“尚未处理”状态的记录的链接。

在 HTML 格式中,我有没有办法让 Selenium 读取所有行以查找处于“尚未处理”状态的行,然后单击 4 列上的链接以访问该订单页面?(最终目的是做一个可以下单的测试,然后去取消它刚刚下的订单)。

4

3 回答 3

0

尝试以下是否对您的外观有所了解,

WebDriver driver = new FirefoxDriver();
By webElementLocatorBy = By.id("your table id");
By webTextLocatorBy = By.id("your coloumn id");
WebElement table = driver.get("your URL").findElement(webElementLocatorBy);
List<WebElement> tableRows = table.findElements(By.tagName("tr"));
for (int row = 0; row < tableRows.size(); row++) {
   if ("Not Yet Processed".equals(driver.get("your URL").findElement(webTextLocatorBy)).getText()) {
       // do your stuff
   }
}
于 2013-11-13T20:05:50.547 回答
0

您需要检查表格中的“尚未处理”,然后单击同一行中某个单元格中的链接。以下代码片段选择文本单元格之前的字段。可以更改“1”以选择更左侧的单元格。请注意,如果 xpath 搜索字符串的末尾不存在“a”,selenium 将不会单击该链接 - 即使您使用正确的索引。

link = driver.find_element_by_xpath("//td[contains(text(), "Not Yet Processed")]/preceding-sibling::td[1]/a")
link.click()

如果链接在表中文本的右侧,请使用“following”而不是“preceding”。

此致,

德雷尔

于 2018-08-27T21:53:58.597 回答
0

如果要根据值单击复选框,则必须使用 for 循环和复选框绝对 xpath 列出所有值并传递“i”值。

WebElement table = driver.findElement(By.xpath("//div[@id ='content']/table"));
/*List <WebElement> head = driver.findElements(By.tagName("th"));
head.size();

for (int h=0;h<head.size();h++){*/
List <WebElement> row = driver.findElements(By.tagName("tr"));
row.size();

for (int i=0;i<row.size();i++){
    List <WebElement> col = row.get(i).findElements(By.tagName("td"));
    col.size();

    for (int j=0;j<col.size();j++){
        String cv = col.get(j).getText();
        // If name is Saudi Arabia, it will click on check box 
        if(cv.equalsIgnoreCase("Saudi Arabia")){
            // Divide the x path where colunm is changing html/body/div[1]/div[5]/div[2]/div/div/table/tbody/tr[pass i value]/td[6]";
            String xp1 = "html/body/div[1]/div[5]/div[2]/div/div/table/tbody/tr[";
            String xp2 = "]/td[6]";
于 2017-04-29T11:25:30.740 回答