gpt4 book ai didi

c# - Selenium WebDriver 跨测试用例共享同一 session

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:14 24 4
gpt4 key购买 nike

我正在使用 Selenium WebDriver(又名 Selenium 2),并且希望在所有测试用例中只保留一个窗口并避免每个测试用例创建新窗口,这样我就可以在网络上处理一致的数据。

我已经完成了搜索,但大多数都在使用 Selenium RC,它似乎与 WebDriver 非常不同(因为我不知道如何保留 session ID 等)。而且,我正在使用 c#..

您能否提供任何简单的示例代码来证明您的想法。我真的很感激!!

提前致谢!

最佳答案

好吧,我会分享我目前在我的项目中使用的方法。尝试使用 webdriver 的静态初始化。希望这会对你有所帮助。嗯,我的结构很简单:我有 BaseSeleniumTest.java,我在其中存储了所有基本方法。我还有其他 TestSuite.java 继承了 BaseSeleniumTest.java 的所有方法: enter image description here

BaseSeleniumTest.java:

package simulator.selenium;


import com.google.common.base.Function;
import com.thoughtworks.selenium.SeleneseTestBase;
import org.apache.commons.lang.RandomStringUtils;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.concurrent.TimeUnit;




public class BaseSeleniumTest extends SeleneseTestBase {
static WebDriver driver;

private static Logger log = LoggerFactory.getLogger(BaseSeleniumTest.class);
private String loginBaseUrl;


@BeforeClass
public static void firefoxSetUp() throws MalformedURLException {

DesiredCapabilities capability = DesiredCapabilities.firefox();

driver = new FirefoxDriver();

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().window().setSize(new Dimension(1920, 1080));
}
@Before
public void homePageRefresh() throws IOException {
driver.manage().deleteAllCookies();
driver.get(propertyKeysLoader("login.base.url"));
}


@AfterClass
public static void closeFirefox(){
driver.quit();

}

public WebElement findElementByXpath(String key) throws IOException {

int i=0;
while(!isElementPresent(By.xpath(propertyKeysLoader(key))) && i<5){
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
i++;
}
return fluentWait(By.xpath(propertyKeysLoader(key)));
}
public WebElement findElementByCssSelector(String key) throws IOException {

int i=0;

while(!isElementPresent(By.cssSelector(propertyKeysLoader(key))) && i<5){
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
i++;
}

}


public void locatorFindingHandling(String key) throws IOException /*throws IOException*/ {

fluentWait(By.cssSelector(propertyKeysLoader(key))).click();

}
public void locatorFindingHandling(String key, String key1) throws IOException {

driver.findElement(By.xpath(propertyKeysLoader(key))).sendKeys(propertyKeysLoader(key1));

}



public String propertyKeysLoader(String key) throws IOException {
Properties props = PropertiesLoaderUtils.loadAllProperties("selenium-config.properties");
PropertyPlaceholderConfigurer props2 = new PropertyPlaceholderConfigurer();
props2.setProperties(props);
return (String)props.get(key) ;
}

public WebElement fluentWait(final By locator){
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(org.openqa.selenium.NoSuchElementException.class);
WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}
);
return foo; } ;


public boolean isElementPresent(By selector)
{
return driver.findElements(selector).size()>0;
}

public boolean isElementVisible(By selector){
return driver.findElement(selector).isDisplayed();
}

public void jsDirectClickUsingDOM_GEBi(String key) throws IOException {
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("document.getElementById(\'"+propertyKeysLoader(key) +"\').click();");
js.executeScript(stringBuilder.toString());

}

public void jsCodeExecution(String jsCode){
JavascriptExecutor js = (JavascriptExecutor)driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(jsCode);
js.executeScript(stringBuilder.toString());
}

public void jsDirectClickUsingDOM_GEBTagName(String tagName,int argNum) throws IOException {
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
// stringBuilder.append("document.getElementsByClassName(\'"+propertyKeysLoader(key) +"\')["+argArrNum+"].click();");
// stringBuilder.append("document.getElementsByTagName(\'"+tagName+"\')[document.getElementsByTagName('div').length-"+argNum+"].click()");
stringBuilder.append("document.getElementsByTagName(\'"+tagName+"\')[document.getElementsByTagName(\'"+tagName+"\').length-"+argNum+"].click()");
js.executeScript(stringBuilder.toString());

}


public String jsGetColor(String css){

JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x=$(\'"+css+"\');");
stringBuilder.append("return x.css('color')");
String res= (String) js.executeScript(stringBuilder.toString());
return res;

}


public String randomStringGenerator(){
return RandomStringUtils.randomAlphabetic(8);
}

public String randomIntSequenceGenerator(){
return RandomStringUtils.randomNumeric(6);
}
}

总而言之,我对您问题的基本解决方案是:

   static WebDriver driver;   

private String loginBaseUrl;


@BeforeClass
public static void firefoxSetUp() throws MalformedURLException {

DesiredCapabilities capability = DesiredCapabilities.firefox();

driver = new FirefoxDriver();

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().window().setSize(new Dimension(1920, 1080));
}
@Before
public void homePageRefresh() throws IOException {
driver.manage().deleteAllCookies();
driver.get(propertyKeysLoader("login.base.url"));
}


@AfterClass
public static void closeFirefox(){
driver.quit();

}

希望对你有帮助。

关于c# - Selenium WebDriver 跨测试用例共享同一 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632855/

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