Skip to main content
 首页 » 编程设计

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

2024年01月28日24Leo_wl

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

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

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

提前致谢!

请您参考如下方法:

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

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(); 
 
        } 

希望对你有帮助。