[英]How to get WebElement in ItestListener
我想獲得WebElement
在ITestListener
階級TestFailure
方法。
有沒有什么辦法讓WebElement
在ItestListener
上testfailure
方法?
我試圖獲取testclass
名稱和testmethod
名稱並且它有效但如何獲取WebElement
:
// WebElement inputbox i need this in ItestListener
public void test1() {
String title = driver.getTitle();
String etitle = "Google1";
WebElement inputbox = driver.findElement(By.id("fakebox-input1"));
inputbox.click();
Assert.assertEquals(title, etitle);
}
// my Listener class
public void onTestFailure(ITestResult iTestResult) {
System.out.println("Test failed >.......");
String classname = iTestResult.getInstanceName(); // class name
this.driver = demo.driver;
System.out.println(iTestResult.getName()); // test method name
CaptureScreenShot cs = new CaptureScreenShot();
cs.takescreenshotoferror(iTestResult.getName(), driver);
}
我可以使用testfailure
獲取類名和方法名:
get
webelement
您可以擴展在 ITestListener 中初始化驅動程序的類。
我建議您創建一個單獨的 Listener 類,該類將擴展您的基類(驅動程序初始化的位置)並實現 ITestListener。
像這樣的東西:
public class ReportListener extends BaseClass implements ITestListener
我的驅動程序在BaseClass
中BaseClass
,因此我可以使用我的驅動程序對象來截取屏幕截圖或執行任何其他操作。
我認為我應該指出以下幾點:
當涉及到元素時,WebDriver 中的失敗有兩種類型(除了與自身加載瀏覽器相關的失敗)。
因此,並非所有故障都具有與其自身關聯的 WebElement。 一旦你得到了一個 WebElement,你就沒有什么可以用它做的了(截圖是好的,但是當它在發生它的頁面上沒有任何信息時,截圖有什么用)
總而言之,要完成您所追求的目標,您需要以下內容:
org.openqa.selenium.support.events.AbstractWebDriverEventListener
或通過實現接口org.openqa.selenium.support.events.WebDriverEventListener
構建的實現org.openqa.selenium.support.events.EventFiringWebDriver
測試代碼
org.testng.ITestListener
以在故障發生時跟蹤它們。這是一個示例,顯示了所有這些操作
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.AbstractWebDriverEventListener;
import org.testng.ITestResult;
import org.testng.Reporter;
public class LocalEventListener extends AbstractWebDriverEventListener {
@Override
public void afterFindBy(By by, WebElement element, WebDriver driver) {
ITestResult result = Reporter.getCurrentTestResult();
result.setAttribute("CurrentElement", element);
}
}
import org.openqa.selenium.WebElement;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class TestNGLocalListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
Object object = result.getAttribute("CurrentElement");
if (object == null) {
return;
}
WebElement element = (WebElement) object;
System.err.println("The element that caused the failure is " + element.toString());
}
}
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(TestNGLocalListener.class)
public class SampleTestClass {
private EventFiringWebDriver driver;
@BeforeClass
public void setup() {
driver = new EventFiringWebDriver(new ChromeDriver());
driver.register(new LocalEventListener());
}
@Test
public void testMethod() {
driver.get("https://the-internet.herokuapp.com/checkboxes");
WebElement checkbox = driver.findElement(By.xpath("//input[@type='checkbox']"));
driver.executeScript("arguments[0].blah.blah", checkbox);
}
@AfterClass
public void cleanup() {
if (driver != null) {
driver.quit();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.