为什么我的断言该元素包含某个String失败,即使它存在?

时间:2017-10-29 16:59:08

标签: java selenium selenium-webdriver selenium-chromedriver

主方法结束时的断言失败,即使该字符串包含在元素中,至少根据我在断言之前执行的控制台写入行。

任何人都可以帮我弄清楚断言失败的原因吗?我的智慧结束了。直接把我的头发拉出来。

抱歉,如果这是一团糟,我是Java新手。

enum Item {
   DRILL(100.00, "a0Gf40000005CctEAE", "Drill"), ///
   WRENCH(15.00, "a0Gf40000005CcuEAE", "Wrench"), ///
   HAMMER(10.00, "a0Gf40000005CcvEAE", "Hammer"); ///

private final double _price;
private final String _itemID;
private final String _itemDisplayName;

Item(double price, String itemID, String itemDisplayName){
    this._price = price;
    this._itemID = itemID;
    this._itemDisplayName = itemDisplayName;
}

double getItemPrice() {
    return _price;  
}

String getItemID() {
    return _itemID;     
}

String getItemName() {
    return _itemDisplayName;            
}
}


public class TestCaseOne {

 static WebDriver driver;


public static void main(String[] args) {

    // TODO Auto-generated method stub


    System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    //System.setProperty("webdriver.gecko.driver", "geckodriver.exe");
    driver = new ChromeDriver();    

    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

    Item testItem = Item.WRENCH;

    driver.get("http://test.com/WebOrderScreen");

    AddItem(testItem);
    ChangeItemQuantity(testItem, 3);        


    driver.findElement(By.xpath("//span[text()='Payment Information']")).click();                   

    WebElement itemLink =       driver.findElement(By.id("order-summary")).findElement(By.xpath(String.format(".//a[(@href='/%s')]", testItem.getItemID())));
    WebElement itemParentRow = itemLink.findElement(By.xpath("../../../.."));
    String text = itemParentRow.getText();
    System.out.println(text);

   Assert.assertTrue(itemParentRow.toString().contains(testItem.getItemName())); 

}


public static void AddItem(Item item) {

    //first find the link to the item we want
    WebElement itemLink = driver.findElement(By.xpath(String.format("//a[(@href='/%s')]", item.getItemID())));
    WebElement itemParentRow = itemLink.findElement(By.xpath("../../../.."));

    itemParentRow.findElement(By.tagName("i")).click(); //now that we found the parent row of the item we want, click the button to add it



    driver.findElement(By.id("shopping-cart")).findElement(By.xpath(String.format(".//a[(@href='/%s')]", item.getItemID())));
    System.out.println("Item ENUM found in shopping cart: " + item);

    ///for debugging 
    /*
    System.out.println(item.getItemID());
    System.out.println(item.getItemPrice());
    System.out.println(itemParentRow.getText());
    */




}


public static void ChangeItemQuantity(Item item, Integer quantity)  {


    WebElement itemLink =       driver.findElement(By.id("shopping-cart")).findElement(By.xpath(String.format(".//a[(@href='/%s')]", item.getItemID())));
    WebElement itemParentRow = itemLink.findElement(By.xpath("../../../../.."));


    //System.out.println("Old item count: " + itemParentRow.findElement((By.xpath(".//input[@inputmode='numeric']"))).getAttribute("value"));
    itemParentRow.findElement((By.xpath(".//input[@inputmode='numeric']"))).clear();
    itemParentRow.findElement((By.xpath(".//input[@inputmode='numeric']"))).sendKeys(quantity.toString());      
    //System.out.println("New item count: " + itemParentRow.findElement((By.xpath(".//input[@inputmode='numeric']"))).getAttribute("value"));

    WebDriverWait wait = new WebDriverWait(driver, 30);
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='shopping-cart']//td[@class='nx-summary']")));

}

}

1 个答案:

答案 0 :(得分:1)

在断言中,您在toString()上调用WebElement,返回的内容如下:

[[[[[[ChromeDriver: chrome on LINUX (084b45f48be31410009e34b87903f54a)] ->     id: order-summary]] -> xpath: .//a[(@href='/a0Gf40000005CcuEAE')]]] -> xpath: ../../../..]

就像Andy所说,你应该使用itemParentRow.getText()