gpt4 book ai didi

Selenium WebDriver 可靠测试

转载 作者:行者123 更新时间:2023-12-04 21:19:14 24 4
gpt4 key购买 nike

我知道这个问题以前被问过很多次,但我仍然找不到适合我的解决方案。当我使用 Selenium WebDriver 运行测试时,大多数情况下它们会因“NoSuchElementException”而失败。我尝试使用显式和隐式等待,但似乎没有任何效果。那么,除了使用 Waits 之外,还有其他方法可以使我的测试更可靠吗?

我在 FirefoxDriver 中使用 selenium-java-2.31.0。下面是一些我试图让我的测试更可靠的代码示例:

public void waitAndClickElement(WebDriver driver, final By selector) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(50, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement elementToClick = wait
.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(selector);
}

});
waitForElementVisible(driver, selector);
elementToClick.click();
}

..和这个:

public WebElement waitForElementPresent(WebDriver driver, final By selector){
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(70, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement elementToClick = wait
.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(selector);
}
});
return elementToClick;

}

...和这个:

WebDriverWait wait = new WebDriverWait(driver, 50);
WebElement user_name = wait.until(visibilityOfElementLocated(By.xpath("//*@id='userName']")));

...和这个:

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

...最后是我尝试使之更可靠的测试之一:

@Test
public void test1{
waitAndClickElement(driver, By.xpath("//*[@id='linkLogIn']"));
waitForElementPresent(driver, By.xpath("//*[@id='userName']")).sendKeys("name");
waitForElementPresent(driver, By.xpath("//*[@id='inputEmail']")).sendKeys("email@gmail.com");
waitForElementPresent(driver,By.xpath("//*[@id='resetPassword']")).click();
assertTrue(isElementPresent(By.xpath("//*[@id='moduleMain']")));

}

谢谢!

最佳答案

尝试以下自定义方法。这对我来说可以,

public boolean waitForElementToBePresent(By by, int waitInMilliSeconds) throws Exception
{
WebDriver driver = getDriver();
int wait = waitInMilliSeconds;
int iterations = (wait/250);
long startmilliSec = System.currentTimeMillis();
for (int i = 0; i < iterations; i++)
{
if((System.currentTimeMillis()-startmilliSec)>wait)
return false;
List<WebElement> elements = driver.findElements(by);
if (elements != null && elements.size() > 0)
return true;
Thread.sleep(250);
}
return false;
}

使用它就像,
waitForElementToBePresent(By.id("linkLogIn", 5000);
driver.findElement(By.id("linkLogIn")).click();

关于Selenium WebDriver 可靠测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811409/

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