繁体   English   中英

为什么我断言即使元素存在某个元素也包含某个String也会失败?

[英]Why is my assertion that the element contains a certain String failing even though it is there?

即使该字符串包含在元素中,main方法末尾的断言也会失败,至少根据我在断言之前执行的控制台写入行而言。

谁能帮我弄清楚为什么该断言失败了? 我机智的尽头。 从字面上拉我的头发。

很抱歉,如果是一团糟,我是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']")));

}

}

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

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

就像Andy指出的那样,您应该使用itemParentRow.getText()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM