gpt4 book ai didi

java - Selenium Web Driver 并行执行测试用例的陈旧元素引用异常

转载 作者:行者123 更新时间:2023-11-30 10:53:16 26 4
gpt4 key购买 nike

这是我的类,其中包含我想并行执行的测试方法 f()。数据提供者为测试方法提供输入。

public class DemoTest {
private WebDriver driver;

@Test(dataProvider = "dp")
public void f(Integer n, String s) {
try {

driver.get("www.google.com");
driver.findElement(By.id("lst-ib")).sendKeys("1234567");
System.out.println("method f id:"+Thread.currentThread().getId()+" n:"+n+" s:"+s);
}
catch(Exception e) {
e.printStackTrace();
}
}

@BeforeSuite
public void beforeMethod() {
try {
driver= new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
System.out.println("Before method id:"+Thread.currentThread().getId());
}
catch (Exception e) {
e.printStackTrace();
}
}

@AfterSuite
public void afterMethod() {
try {
System.out.println("After method id:"+Thread.currentThread().getId());
if(driver != null ) {
driver.quit();

}
}
catch(Exception e) {
e.printStackTrace();
}
}


@DataProvider(parallel=true)
public Object[][] dp() {
return new Object[][] {
new Object[] { 1, "a" },
new Object[] { 2, "b" },
new Object[] { 3, "c" },
new Object[] { 4, "d" },

};
}
}

这是testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite" parallel="methods" data-provider-thread-count="2">
<test name="prelogin">
<classes>
<class name="com.package.DemoTest"></class>
</classes>
</test>
</suite>

我想在 2 个线程中并行执行测试 f()。我在 findElement 方法的一次迭代中得到陈旧元素引用异常。谁能告诉我要添加到这个片段中的是什么?

最佳答案

包括您的数据提供者的名字,

应该是这样的,

@DataProvider(name = "dp" , parallel=true)
public Object[][] dp() {
return new Object[][] {
new Object[] { 1, "a" },
new Object[] { 2, "b" },
new Object[] { 3, "c" },
new Object[] { 4, "d" },

};
}

你的 driver.get 应该是

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

终于解决了您的问题。

如果在您最初找到 元素 之后页面有任何更改,webdriver 引用现在将包含一个 stale 引用。随着页面的更改,该元素将不再位于 webdriver 期望的位置。

要解决您的问题,请尝试在每次需要使用元素时找到它 - 编写一个您可以随时调用的小方法是个好主意。

private void clickAnElementByLinkText(String id) {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id(id)));
driver.findElement(By.id(id)).sendKeys("1234567");
}

@Test(dataProvider = "dp")
public void f(Integer n, String s) {
try {

driver.get("https://www.google.co.in");
clickAnElementByLinkText("lst-ib");
System.out.println("method f id:"+Thread.currentThread().getId()+" n:"+n+" s:"+s);
}
catch(Exception e) {
e.printStackTrace();
}
}

现在您不会看到陈旧元素引用异常

关于java - Selenium Web Driver 并行执行测试用例的陈旧元素引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com