亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在范圍報告中打印 WebElement 變量名稱?

如何在范圍報告中打印 WebElement 變量名稱?

眼眸繁星 2022-07-14 16:19:43
最終目標是獲取用于報告目的的 WebElement 變量名稱。下面是我的代碼。A類:Class A{      public void Click(WebElement element)      {            element.click();            System.out.println("Clicked on"+ element);      }}B類:class B extends A{     @FindBy(xpath = "//li[@class='login-menu']//a[text()='Log In']")     WebElement link_Log_In;     Click(link_Log_In);}期望的輸出:點擊link_Log_In實際輸出:點擊[[ChromeDriver: chrome on XP (acc46d4d382511d7b18396d4a4dddd30)] -> xpath: //li[@class='login-menu']//a[text()='Log In']]另外,我想在 WebDriverEventListener 中使用 afterClickOn(WebElement element, WebDriver driver) 方法在范圍報告中打印相同的Desired Output 。我以這樣一種方式創建了框架,即 WebDriverEventListener 結果根據需要打印在范圍報告中,但無法如上所述打印所需的輸出。請告知我是否在上面的代碼中遺漏了什么,并在 WebDriverEventListener 的 afterClickOn(WebElement element, WebDriver driver) 方法中實現相同的功能下面是事件監聽器 afterClick 方法public void afterClickOn(WebElement element, WebDriver driver) {        System.out.println("Clicked On"+element); // this is to print in console        ExtentManager.getTest().log(Status.valueOf(element), "clicked on"); // this is to print in extent report    }
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

老問題,但對于那些會遇到同樣問題的人。一種可能的解決方案是擴展ElementLocator(例如DefaultElementLocator)您將在findBy()方法中記錄元素名稱的位置。喜歡:


public class WECElementLocator extends DefaultElementLocator {


    final String UNNAMED = UUID.randomUUID().toString();

    final String elementName;


    public WECElementLocator(SearchContext searchContext, Field field) {

        super(searchContext, field);

        Name elementNameAnnotated = field.getAnnotation(Name.class);

        if (elementNameAnnotated != null){

            elementName = elementNameAnnotated.value();

        }else{

            elementName = UNNAMED;

        }

    }


    private void log(String message){

        if(!UNNAMED.equals(elementName)){

            System.out.println(message + " (for [" + elementName + "])");

        }

    }


    @Override

    public WebElement findElement() {

        try{

            log("Attempt to lookup element..");

            WebElement result = super.findElement();

            log("Element successfully located.");

            return result;

        }catch (Throwable e){

            log("Problem in locating element..");

            throw e;

        }

    }

}

您可以引入自己的注釋,該注釋將為您的字段分配一個人類可讀的名稱。喜歡:


public class PageObjectWithName {


    @Name("My test name")

    @FindBy(xpath = "//input[@type='button']")

    WebElement button;


    public PageObjectWithName(SearchContext context) {

        // TODO: implement page initialization

    }


    public void clickButton(){

        button.click();

    }


}

因此,在初始化部分,您將只使用元素定位器的自定義實現,它將獲取注釋并使用字段中的名稱。不需要額外的反射工作。這將與PageFactory線束順利集成。


查看完整回答
反對 回復 2022-07-14
?
達令說

TA貢獻1821條經驗 獲得超6個贊

我不相信有一種簡單的方法可以獲取您為元素提供的名稱(例如 getName() 方法)。我能想到的最接近的事情是執行以下操作:


public class ElementNaming {


    //Create a hashmap that stores the name of the element as a string

    public static HashMap<WebElement, String> webElementKeys = new HashMap<>();


    public static By by = By.id("hplogo");


    public static WebElement instantiateWebElementAndName(String name, By by) {

        webElementKeys.put(driver.findElement(by), name);

        return driver.findElement(by);

    }


    public static void main(String[]args) {

        driver.get("https://www.google.com/");

        WebElement element = instantiateWebElementAndName("element", by);

        System.out.println("Element name: " + webElementKeys.get(element));

    }

}


Console Output: 

Element name: element


查看完整回答
反對 回復 2022-07-14
  • 2 回答
  • 0 關注
  • 72 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號